تعلم لغة الجافا – الدرس الخامس الحلقات Loops
هناك نوعان من الحلقات في جافا هما for وwhile.
For
تحتوي الحلقة for على ثلاثة أقسام:
for (int i = 0; i < 3; i++) {}
يتم تشغيل القسم الأول مرة واحدة عندما ندخل الحلقة.
القسم الثاني ، إذا تم إرجاع true ، نقوم بتشغيل العبارات في الحلقة ، إذا أرجعت false ، فإننا نخرج من الحلقة. يتم تشغيله مباشرة بعد القسم الأول للمرة الأولى ، ثم في كل مرة يتم فيها الانتهاء من الحلقة وتشغيل القسم الثالث.
القسم الثالث هو البيان النهائي الذي سيتم تشغيله في كل مرة يتم فيها تشغيل الحلقة.
لذا في الحالة التي رأيناها للتو ، ستعمل الحلقة 3 مرات. فيما يلي ترتيب الأوامر:
int i = 0; i < 3 // 0 < 3 = true // داخل الحلقة i++ // i is now 1 i < 3 // 1 < 3 = true // داخل الحلقة i++ // i is now 2 i < 3 // 2 < 3 = true // داخل الحلقة i++ // i is now 3 i < 3 // 3 < 3 = false // تم الانتهاء من التكرار ...
يمكننا حذف القسم الأول والثالث من الحلقة (على الرغم من أنها ستكون غريبة) ، وستظل الحلقة تعمل:
for (;i < 5;) {}
بالنسبة للحالات التي نريد فيها استخدام حلقة تبدو هكذا ، فإننا نستخدم حلقة while
While
بناء الجملة يشبه إلى حد كبير الصيغة السابقة حيث نظرنا إلى:
while (condition) {}
سيتم تشغيل الحالة لأول مرة عند الدخول وفي كل مرة يتم تنفيذ الحلقة. إذا أرجعت خطأ ، فلن يتم تشغيل الحلقة.
إذا أردنا أن تعمل الحلقة دائمًا على الأقل واحدة ، فيمكننا استخدام المهام
do { } while(condition);
لاحظ ال ; في نهاية الفترة.
Foreach
نسخة أخرى من for ، هي foreach. الكلمة الرئيسية التي نستخدمها لا تزال موجودة ، ولكن عندما نريد تكرار العناصر الموجودة داخل مصفوفة ، يمكننا ببساطة استخدامها:
int[] arr = {2, 0, 1, 3}; for (int el : arr) { System.out.println(el); }
هذه نسخة قصيرة وتعادل:
int[] arr = {1, 9, 9, 5}; for (int i = 0; i < arr.length; i++) { int el = arr[i]; System.out.println(el); }
لاحظ أنه إذا كنت تريد استخدام فهرس العنصر داخل الحلقة ، فعليك استخدام الإصدار الأطول ولا يمكنك استخدام foreach.
break و continue
تساعدنا هاتان الكلمتان الرئيسيتان في التحكم في الحلقة من الداخل. break سيتسبب في توقف الحلقة ويذهب مباشرة إلى العبارة التالية بعد الحلقة:
int i; for (i = 0; i < 5; i++) { if (i >= 2) { break; } System.out.println("Yuhu"); } System.out.println(i); // انتاج: // Yuhu // Yuhu // 2
continue ستوقف التكرار الحالي وستنتقل إلى المرحلة التالية. لاحظ أنه داخل حلقة for ، ستستمر في تشغيل القسم الثالث.
int i; for (i = 0; i < 5; i++) { if (i >= 3) { break; } System.out.println("Yuhu"); if (i >= 1) { continue; } System.out.println("Tata"); } System.out.println(i); // انتاج // Yuhu // Tata // Yuhu // Yuhu // 3
تمرين
قم بالمرور عبر جميع الأرقام الزوجية وطباعتها ، كل منها في سطر منفصل ، من قائمة الأرقام بنفس الترتيب الذي تم استلامها به. لا تطبع أي أرقام تأتي بعد 237 في التسلسل
public class Main { public static void main(String[] args) { int[] numbers = { 951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, 815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717, 958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470, 743, 527}; // رمزك هنا } }
الحل
public class Main { public static void main(String[] args) { int[] numbers = { 951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, 815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717, 958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470, 743, 527}; for (int i = 0; i < numbers.length; i++) { int el = numbers[i]; if (el == 237) { break; } // باستخدام عامل الباقي القسمة٪ if (el % 2 == 0) { System.out.println(el); } } } }
سنحصل على النتيجة التالية عند التشغيل
402 984 360 408 980 544 390 984 592 236 942 386 462 418 344 236 566 978 328 162 758 918