المصفوفات
متغيّر واحد يخزّن مجموعة قيم من النوع نفسه، تحت اسم واحد، ونصل لكل قيمة برقمها.
- إنشاء مصفوفة بقيم جاهزة أو بحجم محدّد.
- الوصول إلى عنصر وتعديله عبر الفهرس الذي يبدأ من 0.
- استخدام length والمرور على المصفوفة بحلقة for.
- استخدام for-each للقراءة المبسّطة، ومعرفة حدودها.
١الفكرة
تريد تخزين درجات 30 طالبًا؟ لن تنشئ 30 متغيّرًا. المصفوفة صفّ من الصناديق المرقّمة بجانب بعضها؛ كل صندوق يحمل قيمة، ونصل إليه برقمه.
اضغط صندوقًا، أو اكتب فهرسًا (جرّب 4 أو -1).
int[] grades = {90, 85, 70, 100};ومصفوفة نصوص بالمنطق نفسه:
String[] names = {"أحمد", "سارة", "خالد"};٢إنشاء مصفوفة
int[] grades = {90, 85, 70, 100};int[] grades = new int[4]; // 4 صناديقgrades[0] = 90;grades[1] = 85;
int[] مصفوفة أعداد صحيحة، و String[] للنصوص، و double[] للأعداد العشرية.
٣القراءة والتعديل و length
System.out.println(grades[0]); // 90 (أول عنصر)System.out.println(grades[3]); // 100 (آخر عنصر)grades[1] = 88; // تعديل العنصر رقم 1System.out.println(grades.length); // 4 (عدد العناصر)
٤المصفوفات مع الحلقات
بدل طباعة كل عنصر يدويًّا نمرّ عليها بـ for. لاحظ الشرط i < grades.length وليس <=.
int[] grades = {90, 85, 70, 100};int sum = 0; for (int i = 0; i < grades.length; i++){ sum = sum + grades[i];}double average = sum / grades.length;System.out.println("المجموع = " + sum);System.out.println("المتوسط = " + average);
٥for-each: أسهل طريقة للقراءة
int[] grades = {90, 85, 70, 100}; // لكل عنصر g في gradesfor (int g : grades){ System.out.println(g);}
تُقرأ: «لكل g من نوع int في grades، افعل…». والرمز : يعني «في».
| for-each | for العادية | |
|---|---|---|
| الاستخدام | قراءة أو عرض كل العناصر | حين تحتاج رقم الفهرس، أو جزءًا من المصفوفة، أو تعديل القيم |
| الميزة | كود أبسط وأقلّ خطأً | تحكّم كامل |
| حدودها | لا تعطي الفهرس، و g نسخة لا تعدّل المصفوفة | — |
٦نقاط مهمة
- كل عناصر المصفوفة من النوع نفسه.
- حجم المصفوفة ثابت بعد إنشائها.
- الوصول لفهرس خارج الحدود مثل
grades[4]في مصفوفة من 4 عناصر يسبّب خطأً عند التشغيل.
توقّع وتحقّق
أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.
في String[] c = {"Red", "Green", "Blue"}; ما قيمة c[1]؟
مصفوفة فيها 10 عناصر. ما فهرس آخر عنصر؟
ما الخطأ في هذه الحلقة؟
for (int i = 0; i <= grades.length; i++) System.out.println(grades[i]);
تريد مضاعفة كل قيمة داخل المصفوفة. أي حلقة تستخدم؟
الخلاصة
- المصفوفة: متغيّر واحد لمجموعة قيم من النوع نفسه.
- الفهرس يبدأ من 0، وآخر فهرس length - 1.
- المرور الآمن:
for (int i = 0; i < arr.length; i++) - for-each للقراءة المبسّطة، و for العادية للفهرس والتعديل.
- انتبه للقسمة الصحيحة عند حساب المتوسط.
تحدٍّ برمجي: تحليل درجات الحرارة
متقدّملديك درجات حرارة أسبوع في مصفوفة. أوجد الأعلى والأدنى والمتوسط، وعدد الأيام الأعلى من 38.
int[] temps = {32, 35, 41, 38, 29, 44, 40};- حلقة واحدة تكفي للأربعة.
- المتوسط عدد عشري (انتبه لفخ القسمة الصحيحة).
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
public class Temps{ public static void main(String[] args) { int[] temps = {32, 35, 41, 38, 29, 44, 40}; // max, min, sum, count }}
💡 تلميح 1
💡 تلميح 2
💡 تلميح 3
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
public class Temps{ public static void main(String[] args) { int[] temps = {32, 35, 41, 38, 29, 44, 40}; int max = temps[0], min = temps[0], sum = 0, count = 0; for (int i = 0; i < temps.length; i++) { if (temps[i] > max) max = temps[i]; if (temps[i] < min) min = temps[i]; if (temps[i] > 38) count++; sum = sum + temps[i]; } System.out.println("الأعلى = " + max); System.out.println("الأدنى = " + min); System.out.println("المتوسط = " + (double) sum / temps.length); System.out.println("أيام فوق 38: " + count); }}
أسئلة التقييم
ورقة العمل: المصفوفات. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) المصفوفة هي:
2) فهرس أوّل عنصر في المصفوفة هو:
3) grades.length لمصفوفة من 4 عناصر تعطي:
4) للمرور على كل العناصر نستخدم غالبًا:
2السؤال الثاني: صح أم خطأ
3السؤال الثالث: أكمل الفراغات
1) نصل للعنصر عبر اسم المصفوفة و بين [ ].
💡 رقم الخانة، ويبدأ من 0.
2) عدد عناصر المصفوفة نحصل عليه بـ .
💡 خاصيّة تُكتب بعد اسم المصفوفة.
3) آخر فهرس في المصفوفة = length .
💡 آخر فهرس أقل من length بواحد.
4) نمرّ على العناصر بأمان باستخدام for مع .
💡 الخاصيّة التي تعطي عدد العناصر.
5) صيغة for-each: for(int g grades)
💡 رمز واحد يعني «في».
4السؤال الرابع: التوصيل
طابِق كل عنصر في العمود (أ) بما يناسبه في العمود (ب):
- 1) grades[0]
- 2) grades.length
- 3) new int[4]
- 4) for(int g : grades)
- 5) grades[1] = 88
- أ. عدد العناصر.
- ب. أوّل عنصر.
- ج. المرور المبسّط (for-each).
- د. إنشاء مصفوفة بحجم 4.
- هـ. تعديل عنصر.
5السؤال الخامس: أسئلة عملية
1) تتبّع الناتج:
int[] a = {10, 20, 30};System.out.println(a[0] + a[2]);
2) تتبّع الناتج:
int[] a = {5, 5, 5};System.out.println(a.length);
3) اكتب حلقة for تطبع كل عناصر المصفوفة grades:
int[] grades = {90, 85, 70, 100}; for (int i = 0; i < grades.length; i++){ System.out.println(grades[i]);}