آرایه ها :

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

آرایه های تک بعدی

هر آرایه تک بعدیone-dimensional فهرستی از متغیر های هم نوع است. برای ایجاد یک آرایه باید یک متغیر آرایه ای از نوع مورد نظر ایجاد کنید.فرم کلی به این صورت است:

Type  name[ ];

Type در اینجا نوع آرایه است.نوع آرایه؛ نوع داده یکایک عناصر تشکیل دهنده آرایه را مشخص می کند.از این رو نوع آرایه مشخص می کند که چه نوع داده هایی در آرایه ذخیره خواهد شد.

Int  month_day[ ];

تعریف بالا گرچه موجب تثبیت متغیر آرایه ایmonth_day می شود اما در واقع هنوز هیچ آرایه ای وجود ندارد و در حقیقت این آرایه که با null مقداردهی می شود نمایانگر یک آرایه بدون مقدار است.برای اینکه این آرایه را با آرایه ای فیزیکی از مقادیر صحیح مرتبط سازید,لازم است آرایه را با استفاده ازnew ایجاد و آنرا به month_dayتخصیص دهید.newعملگر ویژه ای برای تخصیص حافظه است.(درC++ هم newداریم که دقیقا این کارو انجام میده)

فرم کلی newبرای آرایه های تک بعدی به این صورت است:

  name=new type[size];

Typeمشخص کننده نوع داده ها؛sizeمشخص کننده تعداد عناصر آرایه و nameمتغیر آرایه ای است که با آن مرتبط می شود. یعنی برای اینکه از new برای تخصیص آرایه استفاده کنید؛باید نوع و تعداد عناصری که باید تخصیص داده شوند را مشخص نمایید. عناصری که به وسیلهnew به آرایه تخصیص می یابند به طور خودکار با صفر مقداردهی می شوند:

Month_day=new int[12];

Month_day به آرایه ای از۱۲ عدد صحیح اشاره خواهد داشت به علاوه تمام عناعر آرایه با صفر مقداردهی خواهند شد.

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

سطر زیر سبب نمایش مقدار ذخیره شده در ایندکس شماره ۳(عنصر چهارم)می شود.

System.out.println(month_day[3]);

و این هم کل برنامه؛آرایه ای متشکل از تعداد روزهای هر ماه:

//demonstrate a one-dimensional array.
Class Array{
Public static void main(string args[]){
Int month_day[];
Month_day=new int[12];
Month_day[0]=31;
Month_day[1]=28;
Month_day[2]=31;
Month_day[3]=30;
Month_day[4]=31;
Month_day[5]=30;
Month_day[6]=31;
Month_day[7]=31;
Month_day[8]=30;
Month_day[9]=31;
Month_day[10]=30;
Month_day[11]=31;
System.out.println(“April has”+month_day[3]+”days.”);
}
}

وقتی این برنامه را اجرا می کنید تعداد روزهای ماه آوریل را نمایش می دهد.ایندکس آرایه های جاوا از صفر آغاز می شود بنابراین تعداد روزهای ماه آوریلmonth_day[3] یا ۳۰ است.

Int month_day[ ]=new int [12];

روش بالا روشی است که عموما در برنامه های حرفه ای جاوا خواهید دید.

آرایه ها را می توان هنگام تعریف کردن؛مقداردهی کرد.فرآیند انجام این کار شباهت زیادی به روند انجام آن برای انواع داده های پایه و ساده دارد.برای این کار؛مقادیر  بین دو آکولادbrace نوشته شده و با کاما از یکدیگر جدا می شوند. کاما ها مقادیر عناصر آرایه را از یکدیگر جدا می کنند. آرایه به طور خودکار به گونه ای ایجاد می شود تا فضای کافی برای عناصری  که برای مقداردهی اولیه مشخص می کنید؛وجود داشته باشد.نیازی به استفاده ازnew نیست. به عنوان مثال برای آنکه تعداد روزها را برای هر ماه مشخص کنید ؛مثال زیر آرایه ای از نوع اعداد صحیح ایجاد و با تعداد روزها مقداردهی می کند:

//an improved version of the previous program.
Class AutoArray{
Public static void main(string args[]){
Int month_day[ ]= {31,28,31,30,31,30,31,31,30,31,30,31};
System.out.println(“April has”+month_day[3]+”days.”);
}
}

جاوا به شدت کنترل می کند که تصادفا اقدام به ذخیره مقادیر در خارج از محدوده آرایه نکنید و یا به آنها ارجاع نداشته باشید. سیستم زمان اجرای جاوا کنترل می کند تا اطمینان حاصل شود که تمام ایندکس های آرایه در محدوده آن قرار دارند. مثلا سیستم زمان اجرای جاوا مقدار هر یک  از ایندکس هایmonth_day را کنترل می کند تا اطمینان یابد که تمام آنها در بازه بسته صفر و ۱۱ قرار دارند. اگر بخواهید به عناصر خارج  از محدوده آرایه دستیابی داشته باشید(اعداد منفی یا اعداد بزرگتر از طول آرایه) ؛ با خطای زمان اجرا مواجه خواهید شد.

این برنامه میانگین مجموعه ای از اعداد را محاسبه می کند:

//average an array of value
Class Average{
Public static void main(string args[]){
Double nums[]={10.1,11.2,12.3,13.4,14.5};
Double result=0;
Int i;
For(i=0;i<5;i++)
Result=result+nums[i];
System.out.println(“Average is”+result/5);
}
}

آرایه های چند بعدی

آرایه های چند بعدی multidimensional  در جاوا آرایه ای از آرایه ها است.این آرایه ها همچون آرایه های چند بعدی معمولی به

نظر می رسند اما همانگونه که در ادامه می بینید؛چند تفاوت جزیی خواهند داشت.برای آنکه متغیر آرایه چند بعدی را تعریف کنیم ؛ هر یک از ایندکس ها را بین دو کروشه می نویسیم:

Int two[ ]  [ ]=new  int[4]  [۵];

یک آرایه دو بعدی به نام two .ماتریس ۵*۴ بالا به ضورت آرایه ای از آرایه های نوع int پیاده سازی می شود.

برنامه زیر هر یک از عناصر این آرایه را ازچپ به راست و از بالا به پایین شماره گذاری نمدره و سپس مقادیر آن را نمایش می دهد:


//demonstrate a two-dimensional array.
Class TwoDArray{
Public static void main(string args[]){
Int towD [ ] [ ] =new int [4] [5];
Int i,j,k=0;
For (i=0 ; i<4 ; i++)
For (j=0 ; j<5 ; j++) {
twoD[i] [j] =k;
k++;
}
For (i=0 ; i<4 ; i++) {
For(j=0 ; j<5 ;j++)
System.out.print(twoD[i] [j]+” “);
System.out.println();
}
}
}

Out put:

0  ۱  ۲  ۳  ۴

۵  ۶  ۷  ۸  ۹

۱۰  ۱۱  ۱۲  ۱۳  ۱۴

۱۵  ۱۶  ۱۷  ۱۸  ۱۹


وقتی حافظه ای را به یک آرایه چند بعدی تخصیص دهید؛ کافی است تنها حافظه بعد اول(سمت چپ ترین) را مشخص کنید. بعدی دیگر را می توانید به طور جداگانه تخصیص دهید.

هر چند که در این مثال تخصیص جداگانه بعد دوم آرایه هیچ مزیتی ندارد اما انجام این کار در شرایط دیگر ممکن است سودمند باشد؛ مثلا وقتی ابعاد آرایه ها را به طور دستی تخصیص می دهید؛ نیاز به تخصیص همان تعداد عنصر برای هر یک از ابعاد نخواهید داشت. از آنجایی که آرایه های چند بعدی در واقع آرایه هایی از آرایه ها هستند؛طول هر آرایه تحت کنترل ماست.

در برنامه زیر یک ارایه دو بعدی ایجاد می کنیم که در آن اندازه های بعد دوم مساوی نیستند:

//manually allocate differing size second dimension.
Class TwoDgain{
Public static void main(string args[]){
Int twoD[ ] [ ] =new int [4] [ ];
twoD[0]=new int[1];
twoD[1]=new int[2];
twoD[2]=new int[3];
twoD[3]=new int[4];
int i,j,k=0;
for (i=0 ;i<4 ; i++)
for (j=0 ; j
twoD[i][j]=k;
k++;
}
For (i=0 ; i<4 ; i++){
For(j=0 ;j
System.out.print(twoD[i] [j] +” “);
System.out.println( );
}
}
}

استفاده از آرایه های چند بعدی غیر معمول(نا منظم)ممکن است برای بسیاری از برنامه های کاربردی مناسب نباشد؛ چرا که وجود آرایه های چند بعدی در برنامه ها خلاف انتظار کاربران  خواهد بود. با این وجود؛ آرایه های نامنظم ممکن است در برخی از شرایط به طور کارآمدی مورد استفاده قرار گیرند.مثلا اگر نیاز به آرایه دو بعدی بسیار بزرگی داشته باشیم که تنها برخی از عناصر آنها مقدار داشته باشند(آرایه ای که تمام عناصرش مورد استفاده نباشند) ؛ در آن صورت آرایه های نا منظم راه حل کاملی به شمار می آیند.

مقدار دهی اولیه آرایه های چند بعدی هم میسر است. برای انجام این کار کافی است مقادیر اولیه هر یک از ابعاد را بین دو آکولاد بنویسید.

برنامه زیر ماتریسی را ایجاد می کند که مقدار هر عنصر؛ حاصل ضرب ایندکس های سطر و ستون است. توجه کنید که علاوه بر مقادیر لیترال؛ از جملات جبری هم برای مقداردهی می توان استفاده کرد:

//initialize a two-dimensionL array.
Class Natrix{
Public static void main(string args[ ] ){
Double m [ ] [ ] = {
{0*0,1*0,2*0,3*0},
{0*1,1*1,2*1,3*1},
{0*2,1*2,2*2,3*2},
{0*3,1*3,2*3,3*3}
};
Int I,j;
For(i=0 ; i<4 ;i++){
For(j=0 ;j<4 ; j++)
System.out.print(m [ i] [j] +” “);
Sytem.out.println();
}
}
}

برنامه را اجرا کنید و خروجی را مشاهده کنید.

روش دیگری برای تعریف کردن آرایه ها

Type [ ] name;

در این روش؛کروشه ها پس از مشخصه نوع آرایه قرار می گیرند و نه نام متغیر آرایه.

تعاریف زیر معادل هستند:

Char  twod1 [ ] [ ] =new char[3] [4];

Char [ ] [ ] twod2=new char [3] [4];

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

Int [ ] nums,nums2,nums3 ; 

//creat three arrays

عبارت بالا سه متغیر آرایه ای از نوع int تعریف میکند.نتیجه مثال بالا همچون عبارت زیر است:

Int name [ ] ,name2[ ],name3[ ] ;

   //creat three arrays

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