معرفی آرایه های چند بعدی در زبان برنامه نویسی جاوا


همان طور که در آموزش قبل توضیح داده شد، آرایه ها به منظور ذخیره سازی داده هایی مورد استفاده قرار می گیرند که همگی به یک نوع خاص اختصاص دارند. حال چنانچه تعداد Element ها یا همان مواردی که در یک آرایه قرار می گیرند خیلی زیاد نباشند می توان نحوه نوشتن آرایه را تغییر داد تا کد ما خلاصه تر گردد. در حقیقت روشی که در جلسه ی قبل توضیح داده شد برای مواردی کاربرد دارد که تعداد عناصر آرایه ها بسیار زیاد باشند مثلا ۲۰۰ مورد یا بیشتر.

به منظور خلاصه نویسی آرایه ها در ابتدا یک پروژه جدید تحت عنوان Multidimensional Arrays به معنی "آرایه های چند بعدی" ایجاد کرده و کلاسی با نام StuffToBuy به معنی "چیزهایی که بایستی خریداری شود" داخل آن می سازیم. سپس یک آرایه از جنس String در آن ایجاد می کنیم و نام آن را items به معنی "موارد" می گذاریم. در این مرحله، سورس کد ما می بایست به صورت زیر باشد:

public class StuffToBuy {
    public static void main(String[] args) {
        String[] items = {};
    }
}

همان طور که ملاحظه می شود در آموزش پیشین نحوه ساخت یک آرایه به این صورت بود که پس از علامت مساوی از کلید واژه ی new استفاده کرده سپس مجدداً نوع متغیر را نوشته و داخل علامت های [ ] تعداد Element هایی را نوشته که می خواهیم داشته باشیم. اما از آنجا که در این مثال می خواهیم عددی را تعریف نکرده و مستقیماً نام Element ها یا عناصر تشکیل دهنده آرایه را وارد کنیم از علامت های { } پس از مساوی استفاده می کنیم. حال فرض کنیم که نیاز داریم تا نان، پنیر، کره، چای، سیب زمینی، گوجه، پیاز، قهوه، دوغ و آب معدنی در لیست خرید ما باشد. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

public class StuffToBuy {
    public static void main(String[] args) {
        String[] items = {"Bread", "Cheese", "Butter", "Tea", "Potato",
        "Tomato", "Onion", "Coffe", "Yogurt Drink", "Mineral Water"};
    }
}

در واقع از آنجایی که عناصر تشکل دهنده آرایه ما از جنس استرینگ هستند، از اینرو نیاز است تا این عناصر را داخل علامت های " " قرار دهیم و آن ها را با یک کاما از یکدیگر جدا سازیم. چنانچه بخواهیم نام یکی از این عناصر را روی صفحه نمایش نشان دهیم صرفاً لازم است تا در دستور ;()System.out,println نام آرایه را نوشته و داخل علامت های [ ] شماره مورد مد نظر را بنویسیم. به طور مثال در لیست فوق اگر بخواهیم واژه ی Butter به معنی کره را در پنجره ی کنسول به نمایش در آوریم، صرفاً نیاز است تا عبارت [items[2 را داخل دستور ;()System.out,println بنویسیم (در واقع از آنجا که شمارش این عناصر از صفر شروع می شود، نیاز است تا عدد 2 را وارد کنیم و چنانچه عدد 3 را وارد نماییم، واژه ی Tea نمایش داده خواهد شد.) در این مرحله از کار، کد تکمیل شده ی ما به شکل زیر خواهد بود:

public class StuffToBuy {
    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 در پنجره ی کنسول به نمایش در خواهد آمد:

اگر چه که تعداد عناصر ما ده عدد است، اما اگر بخواهیم مورد شماره ده که Mineral Water به معنی آب معدنی است را روی صفحه به نمایش در آوریم، می بایست عدد 9 را داخل [ ] وارد نماییم. و این در صوتی است که اگر عدد 10 را وارد نماییم، برنامه در حین کامپایل شدن از ما ایراد خواهد گرفت و ارور IndexOutOfBoundsException به معنی این که شماره وارد شده خارج از محدوده ی تعریف شده است نمایش داده خواهد شد.


نحوه شمردن تعداد Element ها داخل یک آرایه
چنانچه بخواهیم تعداد عناصری را که از این طریق وارد برنامه خود کرده ایم را شمارش کنیم، از متدی به اسم length استفاده می کنیم. برای این منظور کد فوق را به شکل زیر بازنویسی خواهیم کرد:

public class StuffToBuy {
    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);
    }
}

در واقع فقط نیاز است تا در دستور ;()System.out.println نام آرایه را نوشته و متد lenght را ضمیمه آن نماییم. حال پس از اجرای برنامه، تعداد عناصر داخل آرایه ما که معادل با 10 مورد است نمایش داده خواهد شد:

نحوه ایجاد Multidimensional Arrays
به طور خلاصه، یک آرایه برای ذخیره سازی داده ها در یک Dimension یا "بعد" استفاده می شود. حال اگر بخواهیم که یک آرایه ای ایجاد کنیم که چند بعدی باشد -به طور مثال، آرایه یی که در برگیرنده ستون و ردیف یک جدول باشد- می بایست از Multidimensional Arrays یا آرایه های چند بعدی استفاده کنیم. مثالی که این گونه آرایه ها در آن کاربرد فراوانی دارد نمودارهایی با محور های x و y می باشد. برای روشن شدن این مسئله، یک کلاس جدید تحت عنوان MultidimensionalArray ایجاد می کنیم و به شکل زیر آن را تکمیل می کنیم:

public class MultidimensionalArray {
    public static void main(String[] args) {
        int[] 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 است. حال نحوه فراخوانی یک عدد مد نظر از این آرایه دو بعدی به این شکل است که در کد زیر مشاهده می شود:

public class MultidimensionalArray {
    public static void main(String[] args) {
        int[][] row = {{10, 20, 30}, {100, 200, 300}};
        System.out.println(row[0][1]);
    }
}

در حقیقت در دستور ;()System.out.println نام آرایه را نوشته و از آنجا که آرایه ما دو بعدی است پس دو جفت از علامت های [ ] مقابل آن قرار می دهیم. همان طور که قبلاً توضیح داده شد، شمارش آرایه ها از صفر آغاز می شود و در این مثال هم ما دو ردیف بیشتر نداریم ردیف اول که {10,20,30} است و ردیف دوم که {100,200,300} می باشد و از آنجا که شمارش در آرایه ها از صفر آغاز می شود پس عدد اختصاص داده شده به ردیف اول صفر خواهد بود و عدد اختصاص داده شده به ردیف دوم یک است. در ردیف اول ما سه Element یا عنصر داریم که عدد 10 جایگاه صفر را دارا است، عدد 20 جایگاه یک و در نهایت عدد 30 جایگاه دو را دارا است. حال اگر بخواهم از ردیف اول عدد دوم را در پنجره ی کنسول به نمایش در آوریم، صرفاً نیاز است تا در دستور ;()System.out.println پارامتر [row[0][1 را وارد کنیم. پس از اجرای برنامه خروجی زیر را خواهیم دید:

به نظر می رسد با توضیحات فوق کاملاً این مسئله روشن شده باشد. حال برای آن که تمرین دیگری انجام داده باشیم قصد داریم تا از ردیف دوم عدد آخر که عدد 300 است را به نمایش درآوریم. از آنجا که عدد اختصاص داده شده به ردیف دوم در این آرایه عدد یک است و از آن جا که عدد اختصاص داده شده به آخرین عدد ردیف دوم، عدد دو است، پس کد خود را به شکل زیر بازنویسی می کنیم:

public class MultidimensionalArray {
    public static void main(String[] args) {
        int[][] row = {{10, 20, 30}, {100, 200, 300}};
        System.out.println(row[1][2]);
    }
}

پس از اجرای برنامه خروجی زیر مشاهده خواهد شد:

در آموزش بعد، با نحوه ی Sort کردن یا مرتب کردن عناصر داخل آرایه ها آشنا خواهیم شد. لازم به ذکر است به منظور درک بهتر مطالب آموزشی جلسه آتی، آشنایی با مقدمات آرایه ها و همچنین آشنایی با نحوه ی به کارگیری حلقه ها ضروری است.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
reza.stevejobs
reza.stevejobs
salam va khaste nabashid
vaqean fogholadan
faqat age amoozesha to mohid android studio bud awlitar mishod😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍
amirimohammad6
amirimohammad6
با سلام
یه سوال داشتم
مگه lenghth یک متد نیست؟
چرا () نداره؟
s_sh
s_sh
سلام.ممنون از آموزش های مفیدتون.
یه سوالی داشتم.توی اونجایی که در آرایه اول تعداد عناصر رو چاپ کردین length یک فیلد است.اما این فیلد از چه کلاسی می آید ممنون میشم پاسخ بدین.ممنون.
کاربر میهمان
کاربر میهمان
سلام،
چه جوری میتونم کدب بنویسم که اسم بگیره و شماره تلفن بده.
iman
iman
لطفا در انتهای هر درس یا حداقل هر فصل ، یک یا چند تمرین برای دانشجویان علاقه مند قرار دهید
ممنون از سایت بسیار خوبتون
Saeid Hadi
Saeid Hadi
اگه بخواییم سطر سوم رو به صورت دستی (مانند مثال) وارد کنیم چجوریه؟
ممنون
کاربر میهمان
کاربر میهمان
سلام, ممنون از آموزش های خوبتون. خسته نباشید
یه سوال:
اگر بخواهیم آرایه ها رو هم از ورودی بگیریم به چه شکل میشه ؟؟ مثلا یه آرایه از جنس int
محمد صالح
محمد صالح
با سلام می توانید با تعریف یک متغیر از نوع اسکنر و نیز استفاده از حلقه نسبت به دریافت اطلاعات آرایه اقدام کنید.

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام.اگه بخوایم نام دوتا از آرایه ها رو با یک دستور System.out.println در کنسول نمایش دهیم.جه جوری باید اونها رو از هم جدا کنیم؟
mohammad m
mohammad m
ممنون از اموزش های خوبتون
کاربر میهمان
کاربر میهمان
دمتون گرم
لطفا ادامه دار باشه
ممنون
bijan9
bijan9
مرسی
mostafa
mostafa
ممنون از اموزش های خوبتون