الفكرة ببساطة
Off-by-One خطأ يكون فيه عدد الدورات أكثر أو أقل بواحد. غالبًا سببه البداية أو الفرق بين < و<=.
Loop Boundaries & Off-by-One
Off-by-One خطأ يكون فيه عدد الدورات أكثر أو أقل بواحد. غالبًا سببه البداية أو الفرق بين < و<=.
من صفر إلى أقل من 10: القيم التي تدخل الجسم هي 0 إلى 9، وعددها 10. أما البداية من 1 مع الشرط نفسه فتعطي 9 دورات فقط.
البداية من 1 مع count <= 10 تعطي 10 دورات. لكن البداية من صفر مع الشرط نفسه تعطي 11 دورة؛ لأن الصفر محسوب أيضًا.
في مثال الشريحة 21، println(count++) تطبع القيمة الحالية ثم تزيدها. أما println(count) وحدها فلا تحدّث العداد وقد تسبّب تكرارًا بلا نهاية.
int count = 0;
int iterations = 0;
while (count < 10) {
iterations++;
count++;
}
System.out.println("Iterations = " + iterations);count = 0 وiterations = 0.Iterations = 10. بدّل البداية والعامل لتشوف الحالات الأربع في الشريحة.لا تحسب آخر قيمة يفشل عندها الشرط ضمن الدورات. الفحص الأخير موجود، لكنه لا ينفّذ الجسم.
بدّل start بين 0 و1، وبدّل العامل بين < و<=. هدفك تكوين إعدادين يعطيان 10 دورات، مثل الشريحة 20.
محاكاة لهذا المثال المحدد، وليست تشغيلًا لكود Java عشوائي.