الفكرة ببساطة
أحيانًا لا نعرف عدد المدخلات مسبقًا. نقرأ قيمًا ونستمر حتى تظهر قيمة توقف التكرار. في هذا المثال نعدّ الأعداد الموجبة الزوجية والفردية.
Sentinel-Controlled Input
أحيانًا لا نعرف عدد المدخلات مسبقًا. نقرأ قيمًا ونستمر حتى تظهر قيمة توقف التكرار. في هذا المثال نعدّ الأعداد الموجبة الزوجية والفردية.
نقرأ أول قيمة قبل while. إذا كانت x > 0 نعدّها باستخدام % 2، ثم نقرأ القيمة التالية داخل الحلقة قبل إعادة فحص الشرط.
نص المسألة يذكر التوقف عند عدد سالب، لكن الحل في الشرائح يستخدم x > 0. هذا يعني أن الصفر يوقفه أيضًا. حافظنا على هذا الشرط ووضّحنا الفرق.
نسخة do-while: حتى لا نعدّ أول قيمة إذا كانت صفرًا أو سالبة، يضع حل الشريحة 18 شرط if (x > 0) حول الحلقة. لا نحسب قيمة الإيقاف ضمن العدادات.
java.util.Scanner kb = new java.util.Scanner("4 7 2 -1");
int even_cnt = 0;
int odd_cnt = 0;
int x = kb.nextInt();
while (x > 0) {
if (x % 2 == 0) {
even_cnt++;
} else {
odd_cnt++;
}
x = kb.nextInt();
}
System.out.println("Even numbers are = " + even_cnt);
System.out.println("Odd numbers are = " + odd_cnt);even_cnt = 1.odd_cnt = 1.even_cnt = 2.لا تنس قراءة قيمة جديدة داخل الجسم، وإلا ستعيد عدّ القيمة نفسها. وفي نسخة do-while لا تحذف فحص القيمة الأولى؛ قد تكون قيمة إيقاف.
غيّر الأعداد داخل Scanner، وضع في النهاية 0 أو عددًا سالبًا. جرّب أيضًا أن تبدأ بـ 0، ثم قارن while وdo-while.
محاكاة لهذا المثال المحدد، وليست تشغيلًا لكود Java عشوائي.