در آموزش قبل آموختیم که آرایهها به منظور ذخیرهسازی مجموعۀ دادههایی با نوع دادۀ یکسان مورد استفاده قرار میگیرند اما در این آموزش به بررسی این موضوع خواهیم پرداخت که چگونه میتوانیم دادههای مورد نظرمان را در آرایههای چندبُعدی ذخیرهسازیم؛ به عبارتی، آرایهای از آرایهها که به منظور کوتاه کردن سورسکد و همچنین سادگی ذخیرۀ دادهها در مواردی به کار گرفته میشوند که نیاز به نگهداری دادههای بسیاری نداشته باشیم.
به منظور درک بهتر نحوۀ تعریف آرایههای یکبُعدی یا عادی و همچنین تفاوت آنها با آرایههای چندبُعدی، در ابتدا یک پروژۀ جدید تحت عنوان Arrays ایجاد کرده و کلاسی به نام OneDimensionalArray
داخل آن میسازیم و سپس با استفاده از دیتا تایپ String
آرایهای در آن ایجاد میکنیم تا نام آیتمهای مورد نیاز را در آن ذخیره نماییم:
public class OneDimensionalArray {
public static void main(String[] args) {
String[] items = {};
}
}
همانطور که ملاحظه میکنیم، برای ساخت آرایۀ مورد نظر ابتدا دیتا تایپ String
را نوشته به دنبال آن علائم [ ]
را درج کرده سپس نام items
را برای آرایۀ خود در نظر گرفتهایم و در ادامه با استفاده از اپراتور =
آرایهای خالی به متغیر items
و بدون ذکر ابعاد آن اختصاص دادهايم (در صورتی که ابعاد مورد نظر برای آرایهای ذکر نشود، میتوان آیتمهایی به تعداد دلخواه بدان اختصاص داد.)
همچنین توجه داشته باشیم که در این مثال و بر خلاف آموزش گذشته از کیورد new
پس از عملگر =
استفاده نکردهایم چرا که به جای تعریف ابعاد مورد نظر برای آرایه، قصد داریم تا مستقیماً اِلِمانهای آن را در آرایۀ مربوطه وارد نماییم و از همین روی پس از عملگر =
علامتهای { }
را درج کرده و به صورت زیر آیتمهای مورد نیاز را مستقیماً بدان منتسب میکنیم:
public class OneDimensionalArray {
public static void main(String[] args) {
String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato", "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
}
}
در کد فوق عناصر تشکیلدهندۀ آرایه از جنس استرینگ بوده و از همین روی آنها را داخل علائم " "
قرار داده و به آرایۀ مربوطه منتسب کرده و هر یک از آیتمها را نیز با یک علامت ,
از یکدیگر مجزا ساختهایم. حال چنانچه بخواهیم نام یکی از اِلِمانهای تشکیلدهندۀ آرایه را در کنسول نمایش دهیم، صرفاً لازم است تا نام آرایه را نوشته و داخل علامتهای [ ]
در مقابل آن اندیس مربوط به اِلِمان مد نظر را درج نماییم و در ادامه دستور مربوطه را به عنوان آرگومان ورودی به متد ()println
پاس دهیم.
به طور مثال، در لیست فوق به منظور دسترسی به اِلِمان «Butter» و نمایش آن در کنسول، عبارت [items[2
را به متد ()println
پاس میدهیم. در واقع، شمارش اندیس عناصر آرایه از 0 شروع میشود و از همین روی به منظور دسترسی به اِلِمان سوم از اندیسی معادل عدد 2 استفاده میکنیم و با اجرای کد زیر میتوانیم اِلِمان مرتبط با استرینگ «Butter» را در کنسول چاپ کنیم:
public class OneDimensionalArray {
public static void main(String[] args) {
String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato", "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
System.out.println(items[2]);
}
}
حال برنامۀ فوق را اجرا کرده و در خروجی خواهیم داشت:
Butter
همانطور که مشاهده میکنیم، عنصر سوم و مربوط به اندیس دوم از آرایۀ items
در کنسول چاپ میشود. به علاوه، همانطور که میدانیم تعداد اِلِمانهای آرایۀ فوق 10 عدد است که در چنین شرایطی اگر بخواهیم تا به آیتم دهم معادل استرینگ «Mineral Water» از آرایۀ فوق دسترسی پیدا کنیم، میباید عدد 9 را داخل علائم [ ]
وارد نماییم مضاف بر اینکه ذکر عدد 10 در مقابل متغیر items
داخل علائم [ ]
منجر به بروز اروری در قالب عبارت «IndexOutOfBoundsException» در حین کامپایل برنامه میشود بدین معنی که اندیس واردشده خارج از محدودۀ تعریفشده میباشد.
نحوۀ شمردن تعداد اِلِمانهای یک آرایه
به منظور شمارش تعداد عناصر تشکیلدهندۀ یک آرایه، به سادگی میتوانیم از اتریبیوت length
استفاده نماییم. در واقع، طول یک آرایه بعد از ساخت آن به هیچ عنوان تغییر نمیکند و از همين روی به منظور دسترسی به طول آن از اتریبیوتی از جنس final
تحت عنوان length
استفاده میکنیم چرا که در طول برنامه تغییر نکرده و ثابت باقی میماند (در آموزش آشنایی با کلیدواژۀ final و کاربردهای آن در زبان برنامهنویسی جاوا به تفصیل مفهوم متغیرهای final
، نحوۀ تعریف آنها و همچنین تفاوت آنها با متغیرهای عادی را تشریح نمودهایم.) حال به منظور دستیابی به اتریبیوت length
کد فوق را به شکل زیر بازنویسی خواهیم کرد:
public class OneDimensionalArray {
public static void main(String[] args) {
String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato", "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
System.out.println(items.length);
}
}
در واقع، با بهکارگیری اتریبیوت length
پس از نام آرایۀ مد نظر، میتوانیم به تعداد اِلِمانهای آن دست پیدا کنیم که در کد فوق آن را به متد ()println
پاس دادهایم تا نتیجۀ حاصل را در کنسول چاپ کند. حال پس از اجرای برنامه، تعداد اِلِمانهای داخل آرایه در کنسول چاپ میشود به طوری که در خروجی داریم:
10
اکنون در ادامۀ آموزش قصد داریم تا به بررسی نحوۀ تعریف آرایههای چندبُعدی و تفاوت آن با آرایههای تکبُعدی بپردازیم.
نحوه ایجاد آرایههای چندبُعدی در زبان جاوا
همانطور که در ابتدای آموزش اشاره کردیم، آرایهها برای ذخیرهسازی دادهها در یک Dimension یا «بُعد» تعریف میشوند. همچنین به منظور تعریف آرایهها از مفهوم Multidimensional Arrays یا «آرایههای چندبُعدی» نیز استفاده میشود که به صورت آرایهای متشکل از چند آرایه يا آرایهای در برگیرندۀ چند سطر و ستون تعریف میشوند که برای روشن شدن این مسئله، یک کلاس جدید تحت عنوان MultiDimensionalArray
در پروژۀ Arrays ایجاد میکنیم و به صورت زیر آن را تکمیل میکنیم:
public class MultiDimensionalArray {
public static void main(String[] args) {
int[] row = {};
}
}
در کد فوق، آرایهای تکبُعدی یا عادی تحت عنوان row
ساختهایم که اگر بخواهیم آن را به یک آرایۀ چندبُعدی تبدیل نماییم، کد فوق را به شکل زیر تغییر میدهیم:
public class MultiDimensionalArray {
public static void main(String[] args) {
int[][] row = {{},{}};
}
}
همانطور که مشاهده میکنیم، تنها با اضافه کردن یک جفت علامت [ ]
دیگر پس از نوع دادۀ مربوط به آرایه و همچنین اضافه کردن دو جفت علامتهای { }
دیگر داخل علائم { }
پس از علامت مساوی که با علامت ,
از هم جدا شدهاند، آرایهای دوبُعدی و متشکل از دو سطر تعریف کردهایم. در ادامه، به روش زیر اعداد مد نظر خود را داخل آرایه ذخیره میکنیم:
public class MultiDimensionalArray {
public static void main(String[] args) {
int[][] row = {{10, 20, 30}, {100, 200, 300}};
}
}
همانطور که مشاهده میکنیم، در آرایه دوبُعدی فوق دو سطر و سه ستون داریم که سطر اول حاوی اعداد 10، 20 و 30 بوده و سطر دوم حاوی اعداد 100، 200 و 300 میباشد. در این مرحله اگر بخواهیم به یکی از اِلِمانهای ذخیرهشده در آرایۀ دوبُعدیِ row
دسترسی پیدا کنیم، به روش زیر عمل خواهیم کرد:
public class MultiDimensionalArray {
public static void main(String[] args) {
int[][] row = {{10, 20, 30}, {100, 200, 300}};
System.out.println(row[0][1]);
}
}
در کد فوق، ابتدا نام آرایه را نوشته و داخل هر یک از علائم [][]
در مقابل آن به ترتیب شمارۀ سطر سپس شمارۀ ستون مرتبط با اِلِمان مد نظر را مینویسیم. همانطور که پیشتر توضیح دادیم، شمارش آرایهها از اندیس 0 آغاز میشود و از همین روی در مثال فوق به منظور دسترسی به عدد مد نظر، اندیسگذاری را از عدد 0 آغاز کردهایم که با پاس دادن آرگومانی به صورت [row[0][1
به متد ()println
میتوانیم به عدد 20 از آرایۀ فوق دست پیدا کنیم. حال پس از اجرای برنامه خروجی زیر را خواهیم داشت:
20
به عنوان مثالی دیگر، در آرایۀ row
از مثال پیشین قصد داریم تا اِلِمان 300 از سطر دوم و ستون آخر را در کنسول چاپ کنیم که برای این منظور کد فوق را به شکل زیر بازنویسی میکنیم:
public class MultiDimensionalArray {
public static void main(String[] args) {
int[][] row = {{10, 20, 30}, {100, 200, 300}};
System.out.println(row[1][2]);
}
}
در واقع، اندیس مربوط به سطر دوم معادل عدد 1 بوده و اِلِمان 300 نیز در این سطر در جایگاه مربوط به اندیس 2 قرار دارد که بدین ترتیب ابتدا اندیس مربوط به سطر سپس اندیس مربوط به ستون را مقابل نام آرایه داخل هر یک از علائم []
درج کرده و دستور [row[1][2
را به عنوان آرگومان ورودی به متد ()println
پاس میدهیم تا پس از دستیابی به اِلِمان مد نظر آن را در کنسول چاپ نماید که پس از اجرای برنامه خروجی زیر را مشاهده خواهیم کرد:
300
همانطور که انتظار داشتیم، با بهکارگیری اندیسهایی به صورت [row[1][2
در مقابل نام آرایه توانستهایم تا به اِلِمان مرتبط با عدد 300 از سطر دوم و ستون سوم دسترسی یافته و در ادامه آن را در کنسول چاپ نماییم.