آشنایی با آرایه‌های چندبُعدی در زبان برنامه‌نویسی جاوا


در آموزش قبل آموختیم که آرایه‌ها به منظور ذخیره‌سازی مجموعۀ داده‌هایی با نوع دادۀ یکسان مورد استفاده قرار می‌گیرند اما در این آموزش به بررسی این موضوع خواهیم پرداخت که چگونه می‌توانیم داده‌های مورد نظرمان را در آرایه‌های چندبُعدی ذخیره‌سازیم؛ به عبارتی، آرایه‌ای از آرایه‌ها که به منظور کوتاه کردن سورس‌کد و همچنین سادگی ذخیرۀ داده‌ها در مواردی به کار گرفته می‌شوند که نیاز به نگهداری داده‌های بسیاری نداشته باشیم.

به منظور درک بهتر نحوۀ تعریف آرایه‌های یک‌بُعدی یا عادی و همچنین تفاوت آن‌ها با آرایه‌های چندبُعدی، در ابتدا یک پروژۀ جدید تحت عنوان 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 از سطر دوم و ستون سوم دسترسی یافته و در ادامه آن را در کنسول چاپ نماییم.

دانلود فایل‌های تمرین

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
reza.stevejobs
reza.stevejobs
۱۳۹۷/۰۱/۱۷
salam va khaste nabashid
vaqean fogholadan
faqat age amoozesha to mohid android studio bud awlitar mishod😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍
amirimohammad6
amirimohammad6
۱۳۹۶/۱۱/۲۰
با سلام
یه سوال داشتم
مگه lenghth یک متد نیست؟
چرا () نداره؟
کاربر میهمان
ملیحهمن یک کاربر مهمان هستم
۱۳۹۵/۰۴/۲۵
سلام, ممنون از آموزش های خوبتون. خسته نباشید
یه سوال:
اگر بخواهیم آرایه ها رو هم از ورودی بگیریم به چه شکل میشه ؟؟ مثلا یه آرایه از جنس int
mohammad m
mohammad m
۱۳۹۵/۰۱/۱۲
ممنون از اموزش های خوبتون
کاربر میهمان
mohammadمن یک کاربر مهمان هستم
۱۳۹۴/۱۰/۳۰
دمتون گرم
لطفا ادامه دار باشه
ممنون
bijan9
bijan9
۱۳۹۴/۰۹/۱۹
مرسی
mostafa
mostafa
۱۳۹۴/۰۹/۱۸
ممنون از اموزش های خوبتون