في هذا الدرس سنتعلم استخدام المصفوفات و الشعاع Arrays and Vector و طريقة صنعهما و الفرق بينهما.
المصفوفة عبارة عن مجموعة من القيم تحفض في متغير واحد و ذلك لتسهيل استخدامها عند البرمجة.
المصفوفة:
قبل البدء نحتاج إلى معرفة كيفية صنع مصفوفة بالجافا. و الأمر بسيط جدأً. فكل ما عليك فعله هو تحديد نوع القيم للمتغير و المعروفة بإسم المرجع (int) و وضع قوسين مربعين [] من ثم اعطاء المصفوفة اسم age . وقبل استخدامها يحب ان نحدد عدد القيم التي سوف تأخذها. وهذا كله يكتب في سطر واحد كالتالي:
كود:
هnt[] age = new int[4];
وبهذا قمنا بإنشاء مصفوفة من نوع int اسمها age ولها اربع قيم مجهولة. لا يمكن ترك القيم مجهولة فعلينا ادخال بعض الارقام من نوع int بها وذلك كالتالي
كود:
int[0] = 3;
int[1] = 7;
int[2] = 14;
int[3] = 18;
لاحظ ان :
الرقم الاول يأخذ العنوان 0 وقيمته 3
الرقم الثاني يأخذ العنوان 1 وقيمته 7
الرقم الثالث يأخذ العنوان 2 وقيمته 14
الرقم الرابع يأخذ العنوان 3 وقيمته 18
وباستخدم قيمة العنوان يمكنك الرجوع للرقم المطلوب بدون أي مشكلة. بعد فهم الطريقة العلوية يمكننا استخدام طريقة أخرى اكثر احترافيه لتعريف مصفوفة جديدة ووضع قيم لها بسطر واحد ! وهي كالتالي حيث سنقوم بصنع نفس المصفوفة السابقة:
كود:
int[] age = {3,7,14,18};
هكذا وبكل بساطة صنعنا هذه المصفوفة التي لها نفس مواصفات المصفوفة السابقة. يوجد أمر أخر يجب معرفته, ففرضاً اننا نريد ان نعرف عدد القيم الموجودة بالمصفوفة و التي هي اربع, نقوم باستخدام الامر التالي:
وهي قيمة تضعها الجافا لنا للاستفادة منها. و كلمة age هي اسم الدالة و Length هو المتغير الذي يحفظ عدد العناصر بالمصفوفة.
وكمثال للتطبيق نقوم بصنع دالة لها 5 قيم ومن ثم نقوم بجمع القيم كلها ووضعها بمتغير أخر. نسمي المصفوفة بnumbers و القيمة التي ستحفظ المجموع الكلي بtotal و سنقوم بصنع المثال بطريقة احترافية لإختصار اكبر قدر من الأسطر:
كود:
package montada02;
public class Array01 {
public static void main(String[] args) {
int[] numbers={34,53,75,6,26};
int total=0;
for (int i = 0; i < numbers.length; i++){
total +=numbers[i];
}
System.out.println("The total is "+total);
}
}
الان يأتي الشرح المفصل للبرنامج:
نقوم بتعريف مصفوفة من نوع int اسمها numbers و عدد عناصرها 5 و هم 34 و 53 و 75 و 6 و 26 و عناوين العناصر من 0 إلى 4. فلو اردنا إستدعاء الرقم 75 لاستخدمنا الامر numbers[2] وهكذا.
بعد ذلك, قمنا بتعريف متغير عدد صحيح اسمه total وقيمته الإبتدائية تساوي صفر.
لقد استخدمنا الاداة for لتلعب دور المؤشر للعناوين حيث سيقوم باستدعاء القيم الواحدة تلو الاخرى إلى ان يصل إلى اخر عنصر ثم ينتقل إلى السطر الاخير. ففي البداية تكون قيمة i = 0 وهي المؤشر لعناوين القيم في المصفوفة. ثم نقارن قيمة i هل هي اصغر من عدد العناصر و التي تساوي خمسة. إذا كان الجواب نعم فيقوم البرنامج بقراءة السطر الداخلي و من ثم يزيد قيمة i بواحد. وإذا كان الجواب لا فإنه يخرج من دائرة الأداة for وينتقل للسطر الاخير. و السطر الدائري يحوي امر إضافة قيمة numbers إلى قيمة total ففي الدورة الاول سيقوم بإضافة 34 و الدورة الثانية سيقوم بإضافة 53 إلى ان ينتهي ويكون المجموع الكل 194 .
بعد الإنتهاء سيقوم سيقوم بطباعة قيمة المجموع الكلي على الشاشة. وبهذا انتهينا من المصفوفات وشاهدنا احد طرق الإستفادة منها.
الشعاع :
و الأن ننتقل إلى الشعاع Vector وهو يختلف بعض الشيء عن المصوفة و لتسهيل الامور سنقوم بالتعرف على الفروقات بينها و هي كالأتي
- يمكن وضع انواع مختلفة في شعاع واحد مثل int + String + float.
- نقوم بإستخدام دوال لإضافة اول استدعاء القيم.
- لا داعي لتحديد عدد العناصر فالشعاع يقوم بالتكفل بذلك.
- استخدامه يكون ابطئ من المصفوفة.
سوف لن نتعمق كثيراً فيه ولكن سأقوم بشرح كيفية صنع شعاع مع قليل من الدوال المتوفرة فيه.
في البداية نحتاج إلى استدعاء الكلاس الخاص بالشعاع و هو موجود مع حزمة الجافا وذلك عن طريق الامر :
و الان سأضع بين يديكم طريقة إضافة اسماء في شعاع names و حذفها فيما بعد. كما بالكود التالي:
كود:
package montada02;
import java.util.*;
public class Vector01 {
public static void main(String[] args) {
Vector names = new Vector();
names.add("Ali");
names.add("Mohammed");
names.add("Salem");
names.add("Ahmed");
for (int i =0 ; i < names.size() ; i ++) {
System.out.println("the index is "+i+" the name is "+names.get(i));
}
names.remove("Salem");
names.remove("Ali");
System.out.println("");
for (int i =0 ; i < names.size() ; i ++) {
System.out.println("the index is "+i+" the name is "+names.get(i));
}
}
}
في البداية قمنا بصنع شعاع جديد بإسم names و ادخلنا اربع اسماء بأستخدام الدالة add() و هي موجودة بالاوبجيكت names. ثم نقوم بطباعة محتوياتها وسيظهر التالي:
the index is 0 the name is Ali
the index is 1 the name is Mohammed
the index is 2 the name is Salem
the index is 3 the name is Ahmed
وبعد ذلك , قمنا بحذف اسمين وهما سالم و علي و نقوم بعرض الاسماء مرة أخرى :
the index is 0 the name is Mohammed
the index is 1 the name is Ahmed
لا حظ ان البرنامج قام بترتيب العناوين بشكل تلقائي حتى بعد حذف اسمين من القائمة. كما ان الدالة size() استخدمت لتعطي عدد العناصر في الشعاع وهو نفس عمل length في المصفوفات.
وبهذا نكون قد انهينا درس اليوم وما عليكم سوى بالتمرين و محاولة تفقد باقي دوال الشعاع بأنفسكم.
تمرين :
1 – قم بصناع كلاس للشكل مربع . ثم اصنع منه خمس مربعات sqr01 إلى sqr05 ومن ثم قم بإضافتهم إلى شعاع بإسم shapes ومن ثم حاول عرض محتويات الشعاع بإستخدام الاداة For .
هذا المثال يوضح ان المصفوفات و الدوال يمكنها ان تكون من أي نوع حتى ولو كان كلاس من صنعك كمثال:
كود:
Square[] shapes = new Sqaure[5];
الأمثلة بالمرفقات