المصفوفات هو احد انواع البيانات، وهو يقوم بتخزين مجموعة محددة العدد من العناصر من نفس النوع. تعتير المصفوفات (arrays) من انواع المصفوفات المعرفة مسبقا من قبل الجافا لذلك عندما نقوم بانشاءها فاننا نقوم بانشاء كائن (Object).

قواعد الكتابة (Syntax)

‘طريقة تعرف المصفوفات تكون كالاتي

// طريقة تعريف المصفوفات
dataType[] arrayName;
// طريقة اخرى لتعريف المصفوفات لكن اقل استخداما
dataType arrayName[];

حيث ان ال dataType هو نوع عناصر المصفوفة مثل int & float & String او اي نوع اخر من الانواع، ثم يتبعها علامة [] لتحديد انها مصفوفة (array).
اما طريقة انشاء المصفوفة تكون اما انشاء مصفوفة (array) ووضع قيمه مسبقا، لكن كثيرا ما نحتاج ان ننشأ مصفوفات بدون تحديد قيمتها اولا، لكن لابد من تحديد عدد عناصرها مسبقا /طولها (length) كالاتي

// طريقة انشاء المصفوفات
// انشاء مصفوفة معلومة قيم عناصرها مسبقا
arrayName = new int[]{element1, element2, element3, ...};// dataType كل عنصر يكون من نوع 

// كثيرا ما نحتاج ان ننشأ مصفوفة فارغة ثم نملئها مستقبلا
// size :لابد مع هذة الطريقة تحديد عدد عناصر المصفوفة مسبقا 
arrayName = new dataType[size];

هل لاحظت عند انشاء المصفوفات (Arrays) احتاجنا كلمة new ؟المصفوفات من الانواع المرجعية (Reference Data Type)، وعند استخدام كلمة new يتم حجز مكان في الذاكرة (memory) ويتم تخزين عنوان هذا المكان في المتغير، يمكن ايضا ان يكون تعريف وانشاء المصفوفات في سطر واحد

// طريقة تعريف المصفوفات ووضع قيم عناصرها فيها
dataType[] arrayName = new int[]{element1, element2};
// بالطريقة المختصرة
dataType[] arrayName = {element1, element2};

// لابد من تحديد عدد عناصر المصفوفة عند الانشاء
dataType[] arrayName = new dataType[size];
ملحوظة: اذا قمنا بتعريف و انشاء المصفوفة (array) في سطر واجد، تتيح لنا الجافا ان نختصر سطر الانشاء بعدم وضع كلمة []new datatype كما في السطر رقم 2. 

لنأخذ مثال لمصفوفة (array) نسميها myArray وتكون عناصرها من نوع int

int[] myArray = {120, 2, 45, 65, 8, 9, 100, 12};
تمثيل المصفوفات في ذاكرة جافا

استخدام عناصر المصفوفات

لكي نستخدم عناصر المصفوفات، نحتاج الى الرمز [] و ترتيب العنصر في المصفوفة. ويجب ملاحظة ان الجافا تبدأ الترتيب من الرقم 0، كما في الصورة بالاعلى. فمثلا اذا اردنا ان نصل الى العنصر الاول في المصفوفة نكتب: [0]myArray واذا اردنا العنصر الثاني يكون [1]myArray وهكذا، ويمكننا تعديل قيم المصفوفة، فمثلا اذا اردنا ان نعدل العنصر الثالث ليكون 50 بدلا من 45 نقوم بالاتي ;50 = [2]myArray، يمكننا ايضا معرفة حجم المصفوفة او عدد عناصرها باستخدام الخاصية length فيكون myArray.length في المثال قيمتها 8

تشغيل
// نطبع العنصر الاول
System.out.println(myArray[0]);// 120
// نطبع العنصر الثاني
System.out.println(myArray[1]);// 2

//نعدل العنصر الثالث ثم نطبعه
myArray[2] = 50;
System.out.println(myArray[2]);// 50

// نطبع عدد عناصر المصفوفة
System.out.println(myArray.length);// 8

استخدام for مع المصفوفات Arrays

اذا اردنا عرض كل القيم في ال array او اجراء بعض العمليات عليها، نستطيع استخدام جملة for لتحقيق ذلك

تشغيل
// تتغير قيمته من 0 الى 7 i المتغير
for(int i =0; i<myArray.length; i++){
	int element = myArray[i];
	System.out.println(element); //i نطبع العنصر على حسب قيمة المتغير
}
//الناتج
/*
120
2
45
65
8
9
100
12
*/

استخدام for .. each مع المصفوفات Arrays

نظرا لاننا نستخدم كثيرا ال for مع المصفوفات، تتيح لنا لغة الجافا طريقة اخرى لكي نمر على كل العناصر

قواعد الكتابة (syntax)

for(dataType varName: arrayName){
// هي عناصر varName
// مع كل لفة varName تتغير قيمة
}

استخدام for .. each مع المثال السابق

تشغيل
for(int element: myArray){
	System.out.println(element);
}

ما اذا اردنا ان ننشأ مصفوفة تحتوي ارقام تسلسل 1000 طالب؟

// لتكرار العملية for نستخدم 
// من الصفر لان المصفوفة تبدأ ترتيبها من الصفر for بدأنا ال 
// تتغير قيمته من 0 الى 999 i المتغير 
for(int i =0; i< serialNumbers;i++ ){
	serialNumbers[i] = i+1; // ليبدأ تسلسل التلاميذ من 1 i هنا نضيف واحد على قيمة المتغير 
}

المصفوفات متعددة الابعاد ( Multi-dimensional Arrays)

ماذا اذا اردنا حفظ بيانات في صورة ثنائية الابعاد او ثلاثية الابعاد، مثلا نريد ان نبني جدول من القيم كما في الشكل السابق:

قواعد الكتابة (Syntax)

// مصفوفة ثنائية الابعاد
dataType[][] arrayName2D;
// تعريف مصفوفة ثلاثية الابعاد
dataType[][][] arrayName3D;

// انشاء مصفوفة ثنائية الابعاد 
arrayName2D = new dataType[size1][size2];
// انشاء مصفوفة ثلاثية الابعاد
arrayName2D = new dataType[size1][size2][size3];

عند انشاء مصفوفات متعددة الابعاد تقوم الجافا بانشاء مصفوفة و تكون عناصرها مصفوفات اخرى، فمثلا اذا اردنا انشاء مصفوفة ثنائية الابعاد كما بالشكل الاعلى، تقوم الجافا بانشاء مصفوفة طولها 3 و يكون كل عنصر منها عبارة عن مصفوفة اخرى طولها 4 كالاتي:

int[][] my2DArray = {{9, 10, 150, 3}, {4, 12, 66, 28}, {99, 5, 7, 3}};

ولكي نتمكن من طباعة عناصر المصفوفة، سنحتاج الى جملة for بداخلها جملة for اخرى:

تشغيل
// سنقوم بالتكرار حول المصفوفة التي بداخلها مصفوفات 
for(int i=0; i<my2DArray.length;i++ ){
	// كل عنصر في المصفوفة الخارجية هو مصفوفة سنسميها المصفوفة الداخلية
	int[] innerArray = my2DArray[i];
	
	for(int j=0; j<innerArray.length; j++){
		
		int value = innerArray[j];
		System.out.println(value);
		
	}
	
}

تمكننا الجافا ايضا باعتبار المصفوفة متعددة الابعاد وكأنها جدول و لكي نستطيع استخدام قيمها ندخل رقم الصف ورقم العمود، كالاتي

طريقة الوصول الى عناصر المصفوفة في جافا

ويكون الكود المقابل لها كالاتي

تشغيل
for(int i=0; i<3;i++ ){
	
	for(int j=0; j<4; j++){

		int value = my2DArray[i][j];
		System.out.println(value);
	
	}
	
}

guest
0 تعليقات
Inline Feedbacks
اظهر كل التعليقات