خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SHOW FULL COLUMNS FROM `wp_options`

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format', 'hashtags') AND tr.object_id IN (2539) ORDER BY t.name ASC

آموزش قدم به قدم جاوا - قسمت هفتم - Hive | مجله توسعه‌دهندگان وب
  • شاخه: دسته‌بندی نشده    ::    بازدید: ۱۲۲۲
  • ۶

آموزش قدم به قدم جاوا – قسمت هفتم

در قسمت هفتم آموزش جاوا با آرایه‌ها و انواع آن‌ آشنا خواهیم شد.

آرایه‌ها (Arrays)

فرض کنید قرار است نمرات ۲۰ دانشجو را در حافظه نگهداری کنید. آیا باید ۲۰ متغیر مثلا از نوع double تعریف کنید یا روشی بهتر برای این کار وجود دارد؟ اینجاست که آرایه‌ها وارد عمل می‌شوند.

آرایه را می‌توان تعدادی خانه کنار هم در حافظه رم در نظر گرفت که می‌توان با داشتن شماره هر خانه (اندیس آن) به محتویات آن خانه دسترسی پیدا کرد.

برای تعریف یک آرایه در جاوا همانند تعریف یک متغیر عمل می‌کنیم: باید یک نام برای آرایه خود انتخاب کنیم (قوانین نام‌گذاری آرایه مانند قوانین نام‌گذاری متغیرهاست) سپس باید نوع داده‌ای که آرایه ما قرار است در خانه‌های خود نگهداری کند را مشخص کنیم.

چند نکته مهم راجع به آرایه‌ها

۱- تمام خانه‌های یک آرایه فقط می‌توانند نوع داده‌ای که برای کل آرایه تعریف شده است را نگه دارند و در یک آرایه نمی‌شود مثلا یک خانه داده‌ای از جنس int و خانه دیگر داده‌ای از جنس double داشته باشد.

۲- اندیس‌گذاری خانه‌های یک آرایه از 0 شروع می‌شود نه از 1.

۳- وقتی یک آرایه با تعداد خانه مشخص تعریف کردیم دیگر در زمان اجرای برنامه نمی‌توانیم اندازه (تعداد خانه‌ها) آرایه را کم یا زیاد کنیم. (بزرگ‌ترین عیب آرایه‌ها هم همین است.)

به شکل زیر توجه کنید:

jarray1

در این شکل آرایه‌ای به نام myArray داریم که 6 خانه دارد و درون هر کدام از این خانه‌ها یک مقدار عددی قرار گرفته است (اعداد بنفش). همچنین اندیس هر خانه آرایه (شماره آن خانه) در زیر آن با رنگ قرمز نوشته شده است. همانطور که گفتیم شماره‌گذاری خانه‌های آرایه از 0 شروع می‌شود نه از 1.

شکل کلی تعریف یک آرایه در جاوا به صورت زیر است:

نام آرایه نوع داده آرایه[] = new تعداد خانه‌های آرایه] نوع داده آرایه];

با دستور new در قسمت شی‌گرایی به طور کامل آشنا خواهید شد.

آرایه‌ای که در شکل قبل دیدیم به صورت زیر تعریف می‌شود:

نوع داده آرایه ما int و نام آن myArray است و 6 خانه دارد. ما فقط آرایه را تعریف کردیم و به آن مقدار ندادیم بنابراین مقدار پیش‌فرضی که در خانه‌های آرایه وجود دارد 0 است (چون نوع داده آن عددی است) حالا برای مقدار دادن به هر کدام از خانه‌های آرایه مانند مقدار دادن به یک متغیر عمل می‌کنیم اما با یک تفاوت کوچک:

;مقدار مورد نظر = [اندیس خانه]نام آرایه

منظور از اندیس خانه همان شماره خانه‌ای از آرایه است که می‌خواهیم مقداری را درون آن قرار دهیم.

در کد زیر می‌خواهیم در خانه دوم آرایه‌ای که تعریف کردیم مقدار 13 را قرار دهیم:

همانطور که گفتیم چون اندیس‌گذاری خانه‌های آرایه از 0 شروع می‌شود بنابراین اندیس خانه دوم 1 است.

حالا اگر بخواهیم به یکی از خانه‌های آرایه دسترسی پیدا کنیم باید به صورت زیر عمل کنیم:

[شماره اندیس]نام آرایه

در کد زیر که ادامه کدهای قبل است یک متغیر تعریف کردیم و مقدار خانه دوم آرایه خود را درون آن متغیر قرار دادیم سپس با دستور چاپ، مقدار خانه دوم آرایه را چاپ کردیم:

اما روش دیگری نیز برای تعریف یک آرایه وجود دارد. اگر بخواهیم در همان ابتدای تعریف آرایه به آن مقدار بدهیم می‌توانیم به صورت زیر عمل کنیم:

در این روش به هر تعداد که مقدار وارد کنید تعداد خانه‌های آرایه هم همان قدر می‌شود.

در این کد آرایه ای را از جنس double تعریف کردیم و 5 مقدار به آن دادیم. پس حالا این آرایه 5 خانه دارد. در خط بعدی طول آرایه (تعداد خانه‌های آن) را چاپ کردیم. به صورت زیر می‌توان طول آرایه را خواند:

نام آرایه.length

پیمایش یک آرایه (Array Iteration)

گاهی اوقات لازم است تا خانه‌های یک آرایه را از اول تا آخر پیمایش کنیم. این کار را می‌توان با استفاده از حلقه‌های تکرار انجام داد.

مثال: در برنامه زیر آرایه‌ای از نمرات دانشجویان یک کلاس داریم. می‌خواهیم میانگین نمرات را حساب کنیم:

متغیری به نام sum تعریف کردیم. در حلقه تکرار مجموع تمام نمرات را به دست آوردیم. سپس در آخر با تقسیم مجموع نمرات بر تعداد نمرات، میانگین کل نمرات را چاپ می‌کنیم. توجه کنید که شرط حلقه i < nomarat.length است چون nomarat.length به ما مقدار 8 را می‌دهد که تعداد خانه‌های آرایه است اما چون اندیس‌های آرایه از 0 شروع می‌شود بنابراین اندیس آخرین خانه آرایه 7 است پس i باید تا 7 افزایش پیدا کند.

روش دیگر پیمایش آرایه استفاده از یک نوع حلقه for به نام for each می‌باشد. این حلقه از اولین خانه آرایه شروع کرده و تا آخر پیش می‌رود. در این نوع حلقه یک متغیر تعریف می‌شود که مقدار هر خانه آرایه را در هر دور حلقه در خود نگه می‌دارد. شکل کلی آن به صورت زیر است:

for (نام آرایه : نام متغیر  نوع داده آرایه) {

}

مثال:

این حلقه تمام مقادیری که در این آرایه قرار گرفته‌اند را چاپ می‌کند به این صورت که حلقه از اولین خانه آرایه شروع می‌کند و مقدار آن را درون متغیر num که تعریف کردیم قرار می‌دهد و ما در بدنه حلقه می‌توانیم از متغیر num برای دسترسی به خانه فعلی آرایه استفاده کنیم و به همین ترتیب تا آخر پیش می‌رود.

نکته: تفاوت استفاده از for each با حلقه for معمولی این است که در حلقه معمولی علاوه بر خواندن خانه‌های آرایه می توان مقدار آن‌ها را تغییر هم داد اما در for each فقط می‌توانیم خانه‌های آرایه را بخوانیم و نمی‌توانیم مقادیر آن‌ها را تغییر دهیم.

مثال: در برنامه زیر مقدار تمام خانه‌های آرایه را به 5 تغییر می‌دهیم:

آرایه‌های دو بعدی (Two Dimensional Arrays)

آرایه‌های دو بعدی را می‌توان به یک جدول که شامل چند سطر و ستون است تشبیه کرد. شکل کلی تعریف یک آرایه دو بعدی به صورت زیر است:

نام آرایه نوع داده آرایه[][] = new تعداد ستون‌ها][تعداد سطرها]نوع داده آرایه];

به شکل زیر دقت کنید:

jarray2

آرایه‌ای دو بعدی از جنس int به نام myArray را در شکل می‌بینید. این آرایه 3 سطر و 4 ستون دارد پس به صورت زیر تعریف می‌شود:

همانطور که در شکل مشخص است برای دسترسی به محتوای خانه سوم از سطر دوم به صورت زیر عمل کردیم:

برای مقداردهی به یکی از خانه‌های آرایه نیز می‌توان مانند آرایه‌های یک بعدی عمل کرد. مثلا اگر بخواهیم به خانه‌ای که در سطر آخر و ستون سوم آرایه myArray قرار دارد مقدار 13 را بدهیم به شکل زیر عمل می‌کنیم:

روش دیگر مقداردهی به آرایه‌های دو بعدی، مقداردهی در زمان تعریف آرایه است. فرض کنید می‌خواهیم آرایه‌ای از جنس int با 3 سطر و 2 ستون با مقادیر اولیه تعریف کنیم:

همانطور که می‌بینید برای هر سطر یک جفت آکولاد نوشتیم که درون هر سطر دو مقدار وجود دارد که یعنی این آرایه یک آرایه دو بعدی 3×2 است.

پیمایش آرایه‌های دو بعدی

برای پیمایش آرایه‌های دو بعدی بهترین راه استفاده از دو حلقه for تو در تو است. حلقه بیرونی مسئول پیمایش سطرها و حلقه درونی مسئول پیمایش ستون‌های آرایه خواهد بود.

مثال:

در این کد numbers.length تعداد سطرهای آرایه را به ما می‌دهد.

i به عنوان شماره سطر و j به عنوان شماره ستون استفاده می‌شود.

در حلقه for دوم برای به دست آوردن تعداد ستون‌ها از numbers[i].length استفاده کردیم.

آرایه‌های بی قاعده (Irregular Arrays)

به این نوع آرایه‌ها دندانه دار (Jagged) نیز می‌گویند. آرایه‌های بی قاعده آرایه‌هایی هستند که تعداد ستون‌های آن در هر سطر می‌تواند متفاوت باشد.

مثال:

هنگام تعریف آرایه فقط تعداد سطرهای آن را مشخص کردیم و سپس برای هر سطر تعداد ستون‌های آن را به شکلی که می‌بینید تعریف کردیم. شکل این آرایه را می‌توان به صورت زیر رسم کرد:

jarray3

نکته: پیمایش این آرایه‌ها مانند آرایه‌های دو بعدی معمولی است.

آرایه‌های سه بعدی

آرایه‌های سه بعدی را می‌توان آرایه‌ای از آرایه‌های دو بعدی در نظر گرفت:

jarray4

این شکل یک آرایه سه بعدی را نشان می‌دهد. همانطور که می‌بینید در هر خانه این آرایه یک آرایه دو بعدی وجود دارد. این آرایه را به صورت زیر تعریف می‌کنیم:

همچنین برای دسترسی به خانه مورد نظر هم مانند قبل عمل می‌کنیم. (با مشخص کردن همه ابعاد)

نکته: پیمایش این آرایه‌ها مشابه پیمایش آرایه‌های دو بعدی است با این تفاوت که باید از سه حلقه تو در تو استفاده کرد.

نکته: پرکاربردترین نوع آرایه‌ها که در برنامه‌نویسی روزمره استفاده می‌شود آرایه‌های یک بعدی و دوبعدی هستند و از آرایه‌های بی‌قاعده و سه بعدی به ندرت استفاده می‌شود.

مصطفی نصیری

دانشجوی نرم افزار هستم و علاقه شدیدی به برنامه نویسی مخصوصا با زبان جاوا دارم! در حال حاضر تمرکزم روی اندرویده. دوست دارم چیزایی که یاد میگیرم رو با بقیه به اشتراک بگذارم :)

همچنین ممکن است دوست داشته باشید ...

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (2599) ORDER BY t.name ASC

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (2599) ORDER BY t.name ASC

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('hashtags') AND tr.object_id IN (2599) ORDER BY t.name ASC

class="post-2599 post type-post status-publish format-standard has-post-thumbnail hentry">
۳
  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_format') AND tr.object_id IN (364) ORDER BY t.name ASC

  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (364) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (364) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('hashtags') AND tr.object_id IN (364) ORDER BY t.name ASC

    class="post-364 post type-post status-publish format-standard has-post-thumbnail hentry">
    ۰
  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_format') AND tr.object_id IN (437) ORDER BY t.name ASC

  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (437) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (437) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('hashtags') AND tr.object_id IN (437) ORDER BY t.name ASC

    class="post-437 post type-post status-publish format-standard has-post-thumbnail hentry">
    ۱

    ۶ واکنش

    1. تلاش گفت:

      قسمت هفتم بسیار خوب بود و آرایه ها جزو بهترین قسمت های برنامه نویسی به شمار میروند.

    2. user گفت:

      توی حلقه for each هم تست کردم ومیشه مقادیررو تغییربدیم که!!! چجوریه؟

      int[] numbers = {1, 2, 5, 7, 8, 9};
      for (int num : numbers) {
      num = 25;
      System.out.println(num);
      }

      • مصطفی نصیری گفت:

        با سلام
        درسته که مقدار num رو تغییر دادید اما num فقط یه متغیر موقت برای نگهداری خونه های آرایه است یعنی در واقع در هر بار اجرای حلقه مقدار یکی از خونه های آرایه توی این متغیر num کپی میشن و اگر مقدار num رو تغییر بدید فقط مقدار اون متغیر موقت رو تغییر دادید.
        کافیه بعد از اینکه حلقه تون تموم شد با یه دستور چاپ مقدار یکی از خونه های آرایه رو چاپ کنید و ببینید که تغییری نکرده.

    3. afshin گفت:

      آیا میشه تعداد خانه های یک آرایه رو یک متغیر مثل a گذاشت و ایم تغیر رو هنگام اجرای برنامه از طریق ورودی برنامه از کابر گرفت ؟؟؟

      • مصطفی نصیری گفت:

        بله. تعداد خانه های آرایه باید مقداری از نوع int باشد و شما می توانید به اشکال مختلف یک عدد صحیح بگیرید و به عنوان تعداد خانه های آرایه استفاده کنید منتها باید توجه داشته باشید که اندازه آرایه را بعد از تعریف آن نمی توان تغییر داد و باید بعد از اینکه تعداد خانه های آرایه را از کاربر گرفتید اقدام به تعریف آرایه کنید.

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *