آموزش برنامه نویسی جاوا
آموزش برنامه نویسی جاوا (بخش دهم: آرایه های دو بعدی و چند بعدی)
آرایه هایی که تاکنون بررسی میکردیم، فقط یک بعدی بودند. مثلا اگر آرایه ای که در بخش هشتم بررسی کردیم را مشاهده کنید، می بینید که به ازای هر سطر از آن جدول، یک مقدار وجود دارد. حال فرض کنید، بتوانیم در هر سطر یک آرایه یک بعدی دیگر قرار دهیم. پس اگر یک آرایه داشته باشیم که 5 سطر داشته باشد ( 5 خانه) و در هر خانه یک آرایه یک بعدی دیگر مثلا 6 سطر (6 خانه)، در واقع به تعداد 5*6=30 خانه آرایه داریم.
به این گونه آرایه ها، آرایه دو بعدی می گوییم. برای درک بهتر آرایه دو بعدی به شکل زیر توجه نمایید:
در شکل بالا، یک آرایه داریم که دارای 3 سطر و 4 ستون است. پس به تعداد 12 خانه، می توانیم مقدار بدهیم. مشاهده می کنید که مثلا خانه اول در سطر اول، با [0][0]a مشخص شده است. یا در سطر شماره 1 و ستون شماره 2 ، مکان آن خانه از آرایه با [2][1]a مشخص شده است.
در این جا این سوال پیش می آید که چگونه می توان آرایه دو بعدی را تعریف نمود. در مورد تعریف آرایه های یک بعدی، دیدیم که می توان آن ها را به صورت زیر تعریف نمود.
int[] OurArray = new int[تعداد خانه ها];
حال اگر بخواهیم یک آرایه دو بعدی را تعریف نماییم، به صورت زیر عمل می کنیم:
int[][] OurArray = new int[تعداد خانه های بعد دوم][تعداد خانه های بعد اول];
در مثال بالا مشاهده می کنید که پس از تعریف نوع متغیر، از دو عدد [] استفاده نمودیم. این دو عدد مشخص می کند که آرایه ما دو بعدی است. در قسمت بعدی نام آرایه را مشخص می کنیم. سپس بعد از تساوی در سمت راست، عملگر new و دوباره نوع متغیر، و تعداد خانه های بعد اول و سپس تعداد خانه های بعد دوم را در داخل [] معرفی می کنیم.
پس در کد زیر، یک آرایه دو بعدی که در بعد اول، 5 خانه و در بعد دوم 6 خانه وجود دارد داریم.
int[][] OurArray = new int[5][6];
به زبانی دیگر 5 سطر و 6 ستون داریم. که به طور کلی 30 عدد خانه را می توان برای آرایه OurArray متصور شد.
استفاده از آرایه های دو بعدی و بعضا چندبعدی، کار ما را بسیار آسان می کنند. مثلا فرض کنید که یک آرایه دو بعدی از نوع رشته تعریف کرده ایم. در بعد اول، اسامی افرادی که در قسمت اداری کار می کنند نوشته می شود. در بعد دوم اسامی افرادی که در قسمت مالی کار می کنند نوشته می شود و در بعد سوم اسامی افرادی که در قسمت خدمات ، و در بعد چهارم اسامی مدیران نوشته می شود. یعنی با چیزی شبیه به جدول زیر مواجه هستیم:
ستون سوم | ستون دوم | ستون اول | |
فدایی | میرزایی | طاهری | سطر اول (اداری) |
ذبیحی | کریمی | موسوی | سطر دوم (مالی) |
قلزم | رجبی | اصغری | سطر سوم (خدماتی) |
قیصری | برومند | فاطمی | سطر چهارم (مدیران) |
حال اگر بخواهیم اسامی افراد بالا را در یک آرایه دوبعدی، مقداردهی نماییم به صورت زیر عمل می کنیم:
ابتدا یک آرایه دو بعدی که در بعد اول دارای 4 خانه و در بعد دوم 3 خانه دارد ، از نوع رشته (String) معرفی می کنیم.
String[][] Edare = new String [4][3];
اگر بخواهیم اسامی را درون آرایه بالا معرفی کنیم یک شیوه به صورت زیر است:
Edare[0][0]="طاهری"; Edare[0][1]="میرزایی"; Edare[0][2]="فدایی"; Edare[1][0]="موسوی"; Edare[1][1]="کریمی"; Edare[1][2]="ذبیحی"; Edare[2][0]="اصغری"; Edare[2][1]="رجبی"; Edare[2][2]="قلزم"; Edare[3][0]="فاطمی"; Edare[3][1]="برومند"; Edare[3][2]="قیصری";
مشاهده می کنید که ابتدا خانه های سطر اول، که در بعد اول از آرایه یعنی خانه شماره 0، را مقدار دهی کردیم. سپس خانه های سطر دوم و …
شیوه دیگر مقدار دهی چیزی شبیه به شیوه مقدار دهی دومی که در بخش آرایه یک بعدی تعریف نمودیم، است. مثلا فرض کنید بخواهیم در سطر اول اعداد 1 تا 3 و در سطر دوم اعداد 4 تا 6 را معرفی کنیم.
به صورت زیر عمل می کنیم:
int [][] Array2bodi = {{1,2,3},{4,5,6}};
دقت کنید که یک کروشه کلی در قسمت سمت راست وجود دارد که در داخل آن دو کروشه دیگر که با ویرگول، از هم جدا شده اند نیز وجود دارد. هر کدام از آن کروشه ها دارای سه مقدار هستند. پس در بعد اول از آرایه بالا، 2 خانه و در بعد دوم از آرایه بالا 3 خانه وجود دارند که با اعداد 1 تا 3 و 4 تا 6 مقداری دهی شده است.
آرایه دو بعدی و حلقه For
اگر بخواهیم آرایه بالا را در خروجی چاپ کنیم به چه صورت عمل می کنیم؟
می توان با یک حلقه For تو در تو این کار را به سادگی انجام داد. از آنجاییکه آرایه بالا دو بعدی است، پس یک حلقه For تو در تو دوتایی لازم داریم.
حلقه اول برای سطر ها (بعد اول) و حلقه دوم برای ستون ها (بعد دوم) به کار می رود. سپس در قسمتی که می خواهیم آرایه دو بعدی ما چاپ شود، در خانه اول از متغیر شمارنده ای که برای حلقه اول استفاده کردیم، استفاده می کنیم. و در خانه دوم از متغیر شمارنده ای که برای حلقه دوم استفاده کردیم، استفاده می کنیم.
int [][] Array2bodi = {{1,2,3},{4,5,6}}; for(int i=0;i<2;i++) for(int j=0;j<3;j++) System.out.print(Array2bodi[i][j]);
نتیجه خروجی کد بالا به شرح زیر می باشد.
123456
آرایه سه بعدی و بالاتر
اگر کار با آرایه دو بعدی را به خوبی یاد گرفته باشید، می توانید آرایه سه بعدی و بالاتر را نیز به آسانی یاد بگیرید.
یک آرایه سه بعدی به صورت زیر تعریف می شود:
int [][][] Array3bodi = new int [تعداد خانه های بعد سوم][تعداد خانه های بعد دوم][تعداد خانه های بعد اول];
برای محاسبه تعداد کل خانه ها کافی است که تعداد خانه های هر بعد را در هم ضرب کنید.
مثلا آرایه سه بعدی زیر را در نظر بگیرید.
int [][][] Array3bodi = new int [5][4][3];
آرایه بالا، در واقع دارای 5*4*3 خانه یعنی 60 خانه می باشد.
اگر بخواهیم یک آرایه چهار بعدی تعریف کنیم نیز می توان یک بعد اضافی تعریف نمود.
برای مثال آرایه زیر یک آرایه چهار بعدی است که در بعد اول دارای 5 خانه، در بعد دوم 4 خانه و در بعد سوم ، 3 خانه، در بعد چهارم 6 خانه دارد.
int [][][][] Array4bodi = new int [5][4][3][6];