آرایه تعدادی از خانه های حافظه با نام یکسان ولی اندیس های مختلف برای نگهداری تعدادی داده هم نوع است.در این جلسه روش تعریف آرایه های یک بعدی و دوبعدی (ماتریس ها )را آموزش داده و برنامه هایی برای کار با آرایه ها نوشته شده اند.
در زبان جاوا برای تعریف آرایه به شکل زیر عمل می شود:
مثال : تعریف آرایه ای برای نگهداری حداکثر 100 عدد صحیح
آرایه List داده 100 خانه با اندیس های از 0 تا 99 خواهد بود.
برای مقداردهی خانه های آرایه از دستورات زیر استفاده می کنیم :
List[0] = 230;
List[1] = 400;
…
List[99] = 421;
و برای چاپ عناصر آرایه می توان از حلقه های تکرار مثل for استفاده کرد:
for(inti=0 ; i<100 ; i++ )
System.out.println( List[i] );
و قطعه کد زیر هم ماکزیمم عناصر آرایه را پیدا می کند:
double max = myList[0];
for (inti = 1; i<myList.length; i++) {
if (myList[i] > max) max = myList[i];
}
مثال: برنامه ای بنویسید که ابتدا 100 عدد اعشاری از کاربر گرفته در یک آرایه ذخیره کند و میانگین آنها را محاسبه کند. سپس تعداد اعداد بزرگتر ار میانگین موجود در آرایه را محاسبه کرده و چاپ کند.
public class AnalyzeNumbers {
public static void main(String[] args) {
double sum = 0;
double[] numbers = new double[100];
java.util.Scanner input = new java.util.Scanner(System.in);
for (inti = 0; i<numbers.length ; i++) {
System.out.print("Enter a new number: ");
numbers[i] = input.nextDouble();
sum += numbers[i];
}double average = sum / 100;int count = 0; // The number of elements above average
for (inti = 0; i< 100 ; i++)
if (numbers[i] > average) count++;
System.out.println("Average is " + average);
System.out.println("Number of elements above the average " + count);}
}
بسته java.util.Scanner در ابتدای برنامه معرفی نشده ولی برای تعریف متغیر ورودی input نام کامل بسته نوشته شده است.
چندنکته در مورد آرایه:
- از خاصیت length هر آرایه برای بدست آوردن تعداد خانه های آن استفاده می شود.
- طول آرایه هنگام ایجاد آرایه تعیین شده و در طول اجرای برنامه قابل تغییر نیست.
- خانه های آرایه با نوع داده عددی در شروع کار مقدار 0 می گیرند، برای نوع داده کاراکتری مقدار پوچ \0 می گیرند و برای نوع داده Boolean مقدار false می گیرند.
برای تعریف آرایه با مقداردهی اولیه بصورت زیر کار می کنیم، که آرایه ای بطول 4 ایجاد می شود:
double[] myList = {1.9, 2.9, 3.4, 3.5};
دستور فوق معادل دستورات زیر است:
double[] myList = new double[4];
myList[0] = 1.9;
myList[1] = 2.9;
myList[2] = 3.4;
myList[3] = 3.5;
آرایه از نوع کاراکتر زیر را در نظر بگیرید
char[] city = {'D', 'a', 'l', 'l', 'a', 's'};
این رشته وارد شده در آن را می توان با یک دستور ساده نیز چاپ کرد:
System.out.println(city);
حلقه تکرار foreach
این حلقه برای پیمایش آرایه ها استفاده می شود، شکل اجرای آن بصورت زیر است:
for (elementType element: arrayRefVar) {
// Process the element
}
و برای چاپ عناصر آرایه می نویسیم:
for (double u: myList) {
System.out.println(u);
}
آرایه های دو بعدی و چند بعدی
آرایه ها در جاوا می توانند دو بعدی یا چند بعدی باشند، آرایه های دو بعدی برای نگهداری ماتریس ها استفاده شده و کاربرد زیادی دارند. برای تعریف آرایه دو بعدی بصورت زیر عملی می شود:
یا
که روش اول بیشتر مورد استفاده قرار می گیرد.
مثال :
یا
در هر صورت بعداً می توان به آرایه دو بعدی حافظه تخصیص داد:
که یک آرایه با 5 سطر و 5 ستون ایجاد می کند.
برای تعریف آرایه با مقداردهی اولیه نیز بصورت زیر عمل می شود:
int[][] array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12}
};
مثال زیر را در نظر بگیرید:
int[][] triangleArray = {
{1, 2, 3, 4, 5},
{2, 3, 4, 5},
{3, 4, 5},
{4, 5},
{5}
};
آرایه ایجاد شده در هر سطر تعداد ستون های مختلفی خواهد داشت. این آرایه های دو بعدی را Ragged می گویند. برای تعریف این نوع آرایه می توان ابتدا تعداد سطرها را تعیین کرد و سپس برای هر سطر جداگانه تعداد ستون ها را مشخص کرد:
int[][] M= new int[5][];
M [0] = new int[5];
M [1] = new int[4];
M [2] = new int[3];
M [3] = new int[2];
M [4] = new int[1];
برای پیمایش آرایه دو بعدی نیاز به دو حلقه تکرار تودرتو می باشد قطعه برنامه زیر عناصر آرایه دو بعدی با هر تعداد سطر و ستون را از کاربر دریافت می کند:
java.util.Scanner input = new Scanner(System.in);
for(intr = 0; r <matrix.length ; r++) {
for(intc = 0; c < matrix[r].length ; c++) {
matrix[r][c] = input.nextInt();
}
}