8.8 遍历和计数

如果前面的值表示的是考试成绩,并且这些成绩非常糟糕,老师可能会在课程上以直方图(histogram)的方式呈现它们。直方图在统计学中是一组计数器,记录了每个值出现的次数。

就考试成绩而言,我们可能需要 10 个计数器,用来指出考试成绩为 90~100 分、80~90 分等的学生分别有多少。为此,我们可以遍历数组,并计算值在给定范围内的元素数。

下面的方法接受一个数组和两个整数(lowhigh),并返回值在范围 low~high 的元素数。

  1. public static int inRange(int[] a, int low, int high) {
  2. int count = 0;
  3. for (int i = 0; i < a.length; i++) {
  4. if (a[i] >= low && a[i] < high) {
  5. count++;
  6. }
  7. }
  8. return count;
  9. }

你应该很熟悉这种模式:这也是一种归并操作。注意,范围包含 low>=),但不包含 high<)。这种细节可避免我们将一个分数算两次。

现在可以计算每个范围内的考试成绩数了:

  1. int[] scores = randomArray(30);
  2. int a = inRange(scores, 90, 100);
  3. int b = inRange(scores, 80, 90);
  4. int c = inRange(scores, 70, 80);
  5. int d = inRange(scores, 60, 70);
  6. int f = inRange(scores, 0, 60);