8.6 数组遍历

很多计算可通过循环访问数组的每个元素并对其执行特定的操作来实现。例如,下面的循环计算了一个 double 数组的各个元素的平方:

  1. for (int i = 0; i < a.length; i++) {
  2. a[i] = Math.pow(a[i], 2.0);
  3. }

循环访问数组的每个元素被称为遍历(traversal)。另一种常见的模式是查找(search),这需要遍历数组,在其中查找特定的元素。

例如,下面的方法接受一个 int 数组和一个 int 值,并返回 int 值在数组中所处位置的索引:

  1. public static int search(double[] a, double target) {
  2. for (int i = 0; i < a.length; i++) {
  3. if (a[i] == target) {
  4. return i;
  5. }
  6. }
  7. return -1;
  8. }

如果在数组中找到目标值,那么就立即返回其索引;如果循环结束时也没有找到目标值,那么就返回 -1——用于表示查找失败的特殊值。

另一种常见的遍历是归并(reduce)操作,用于将数组归并为单个值。归并操作包括计算各个元素的和或积、找出最大值或最小值。下面的方法接受一个 double 数组,并返回其中所有元素的和:

  1. public static int sum(double[] a) {
  2. double total = 0.0;
  3. for (int i = 0; i < a.length; i++) {
  4. total += a[i];
  5. }
  6. return total;
  7. }

循环前将 total 初始化为零。在每次循环时都将 total 加上一个数组元素的值;循环结束后,total 为数组中所有元素的和。以这种方式使用的变量有时被称为累加器(accumulator)。