حـل بدورة واحدة

هذه الشفرة تعمل، لكنها ليست فعالة كما ينبغي. في كل مرة تستدعى فيها inRange، يتم المرور على كامل المصفوفة. ومع ازدياد عدد المجالات، سيكون لدينا الكثير من عمليات الاجتياز.
سيكون من الأفضل المرور على المصفوفة مرة واحدة، ومن أجل كل قيمة، نحسب أي مجال تنتمي إليه. بعدها يمكننا زيادة العداد المناسب. في هذا المثال، ستكون تلك الحسبة تافهة، لأننا نستطيع استعمال القيمة نفسها كدليل لمصفوفة العدادات.
ها هي الشفرة التي تجتاز مصفوفة العلامات، مرة واحدة، وتولد مخطط الأعمدة الخاص بها.
كود:
  int[] counts = new int[100];
  for (int i = 0; i < scores.length; i++) {
    int index = scores[i];
    counts[index]++;
}
تمرين 12.5. غلف هذه الشفرة في عملية باسم makeHist تأخذ مصفوفة علامات وتعيد مخطط الأعمدة (histogram) قيم المصفوفة.