العد

من الأساليب الجيدة لحل مشاكل مثل هذه، التفكير بعمليات بسيطة سهلة الكتابة، ثم جمعهم معاً لتشكيل الحل. هذه العملية تدعى التطوير من الأسفل إلى الأعلى (bottom-up development). انظر http://en.wikipedia.org/wiki/Top-dow...ttom-up_design.
ليس واضحاً دائماً أين يجب أن تبدأ، لكن من الجيد أن تبحث عن مشاكل متفرعة تطابق نمطاً قد شاهدته من قبل.
في القسم 8.7 رأينا حلقة اجتازت سلسلة محرفية وعدّت مرات تكرار حرف معطى في السلسلة. يمكنك اعتبار هذا البرنامج مثالاً عن نمط يدعى "العبور والعد – traverse and count". عناصر هذا النمط هي:
· مجموعة أو حاوية يمكن عبورها، مثل مصفوفة أو سلسلة محرفية.
· اختبار يمكنك إجراؤه على كل عنصر في الحاوية.
· عداد يتابع عدد تكرار العناصر التي نجحت في الاختبار.
في هذه الحالة، يكون الوعاء هو مصفوفة أعداد صحيحة. الاختبار هو هل تنتمي درجة معطاة إلى مجال معين من القيم أم لا.
هنا عملية باسم inRange تحسب عدد العناصر في مصفوفة، التي تنتمي لمجال قيم معطى. المعاملات هي المصفوفة وعددين صحيحين يبينان حدي المجال الأدنى والأعلى.
كود:
public static int inRange(int[] a, int low, int high) {
  int count = 0;
  for (int i=0; i<a.length; i++) {
    if (a[i] >= low && a[i] < high) count++;
  }
  return count;
}
لم أحدد فيما إذا كان شيء ما مساوياً للحد الأدنى أو الأعلى سينتمي إلى المجال أم لا، لكن يمكنك أن ترى من الشفرة أن low ينتم إلى المجال في حين high لا ينتمي إليه. هذا سيمنعنا من عد أية عنصر مرتين.
الآن يمكننا حساب عدد العلامات الموجودة ضمن المجالات التي تهمنا:
كود:
int[] scores = randomArray(30);
int a = inRange(scores, 90, 100);
int b = inRange(scores, 80, 90);
int c = inRange(scores, 70, 80);
int d = inRange(scores, 60, 70);
int f = inRange(scores, 0, 60);