الدرس 6
📋 في الخطة: الوحدة 5. العبارات الشرطية وحلقات التكرار
العبارات الشرطية
حتى الآن كان البرنامج ينفّذ كل سطر من الأعلى إلى الأسفل. الآن يتّخذ قرارًا: إذا تحقّق شرط فافعل كذا.
بعد هذا الدرس ستستطيع أن:
- تكتب جملة الشرط if و if…else.
- تبني سلسلة if…else if لاختيار حالة واحدة من عدة حالات.
- تكتب جملة if متداخلة، وتربط الشروط بالرموز المنطقية.
- تتتبّع مسار التنفيذ حسب قيمة الشرط.
١الفكرة
نضع شرطًا نتيجته true أو false، فيُنفَّذ الكود المرتبط به فقط عند تحقّقه.
٢الصور الأربع لجملة if
١. if بمفردها: نفّذ أو تجاوز
int age = 20; if (age >= 18){ System.out.println("مسموح لك بالدخول");}
run:
مسموح لك بالدخول
BUILD SUCCESSFUL (total time: 0 seconds)
لو كان العمر أقل من 18 لا يُطبع شيء.
٢. if … else: اختر بين مسارين
int grade = 50; if (grade >= 60){ System.out.println("ناجح");}else{ System.out.println("راسب");}
run:
راسب
BUILD SUCCESSFUL (total time: 0 seconds)
٣. if … else if … else: عدّة شروط بالترتيب
يُنفَّذ أوّل شرط يتحقّق فقط، ثم يخرج. و else الأخيرة لبقية الحالات.
حرّك الدرجة وراقب المسار
int
int grade = 75; if (grade >= 90) { System.out.println("ممتاز");}else if (grade >= 80) { System.out.println("جيد جدًا");}else if (grade >= 70) { System.out.println("جيد");}else { System.out.println("راسب");}
الشروط التي فُحصت
٤. if المتداخلة: شرط داخل شرط
جرّب الشرطين
int;
int age = 20;boolean hasTicket = true; if (age >= 18) { if (hasTicket) { System.out.println("تفضّل بالدخول"); }}
٣أخطاء شائعة
✗ خطأ
if (x = 5)✓ صواب
if (x == 5)= إسناد، و == مقارنة. داخل الشرط نحتاج المقارنة.
✗ خطأ
if (age >= 18);{ System.out.println("مسموح");}
✓ صواب
if (age >= 18){ System.out.println("مسموح");}
الفاصلة المنقوطة بعد الشرط تُنهي جملة if فارغة، فتُنفَّذ الكتلة دائمًا مهما كان الشرط.
- الشرط بين قوسين ( )، والكود المرتبط بين قوسين معقوفين { }.
- كلمة
elseبأحرف صغيرة؛Elseخطأ لأن جافا حسّاسة لحالة الأحرف.
توقّع وتحقّق
تأمل الكود التالي،
int x = 10;if (x > 15) System.out.println("كبير");else System.out.println("صغير");
ماذا سيكون الناتج عند تنفيذه؟
10 > 15 خطأ، فيُنفَّذ else.
تأمل الكود التالي،
int grade = 95;if (grade >= 90) System.out.println("ممتاز");else if (grade >= 80) System.out.println("جيد جدًا");else if (grade >= 70) System.out.println("جيد");else System.out.println("مقبول");
كم رسالة تُطبع عند تنفيذه؟
أوّل شرط متحقّق فقط يُنفَّذ، ولو تحقّقت الشروط التالية أيضًا.
تأمل الكود التالي،
if (age >= 18){ if (hasTicket) System.out.println("تفضّل بالدخول");}
متى تُطبع العبارة «تفضّل بالدخول»؟
يمكن كتابتها أيضًا بشرط واحد: age >= 18 && hasTicket.
أي سطر صحيح؟
الخلاصة
- if تنفّذ الكود عند تحقّق الشرط فقط.
- if…else تختار بين مسارين.
- else if تختبر الشروط بالترتيب وتنفّذ أوّل شرط متحقّق فقط.
- if المتداخلة تفحص شرطًا بعد التأكّد من سابقه.
- لا تضع ; بعد الشرط، واستخدم == للمقارنة.
تحدٍّ برمجي: مُقدِّر الدرجات
متوسطحوّل الدرجة إلى تقدير، ثم حدّد هل الدرجة زوجية أم فردية.
المطلوب:
- 90 فأكثر ممتاز، 80 جيد جدًا، 70 جيد، 60 مقبول، وأقل من 60 راسب.
- استخدم سلسلة if … else if … else.
- استخدم % 2 لمعرفة الزوجي والفردي.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
public class Grader{ public static void main(String[] args) { int grade = 67; // 1) التقدير // 2) زوجي أم فردي }}
التقدير: مقبول
الدرجة فردية
💡 تلميح 1
رتّب الشروط من الأعلى إلى الأدنى: >= 90 ثم >= 80 …
💡 تلميح 2
الرقم زوجي إذا كان grade % 2 == 0.
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
public class Grader{ public static void main(String[] args) { int grade = 67; if (grade >= 90) System.out.println("التقدير: ممتاز"); else if (grade >= 80) System.out.println("التقدير: جيد جدًا"); else if (grade >= 70) System.out.println("التقدير: جيد"); else if (grade >= 60) System.out.println("التقدير: مقبول"); else System.out.println("التقدير: راسب"); if (grade % 2 == 0) System.out.println("الدرجة زوجية"); else System.out.println("الدرجة فردية"); }}