在 Java 中使用 for 循环比较数组时修改静态方法以添加两个计数器

Modifying a static method to add two counters when comparing arrays using for loops in Java

利用我已有的这段代码,我想修改 selectionSort 方法使其具有两个计数器,一个用于比较次数,一个用于数据交换次数。每次比较两个数据元素时(不管项目的顺序是否正确——我们感兴趣的是是否进行了比较),增加比较计数器。每次实际交换两个数据项时,增加数据交换计数器。

到目前为止,这就是我尝试添加的计数器。但是,我收到一个错误 "Unresolved compilation problem: counter cannot be resolved to a variable"。

public static void selectionSort(double[] list) {
      for (int i = 0; i < list.length - 1; i++) {
      // Find the minimum in the list[i..list.length-1]
      double currentMin = list[i];
      int currentMinIndex = i;
      int counter = 0;

      for (int j = i + 1; j < list.length; j++) {
        if (currentMin > list[j]) {
          currentMin = list[j];
          currentMinIndex = j;
        }
      }

      // Swap list[i] with list[currentMinIndex] if necessary;
      if (currentMinIndex != i) {
        list[currentMinIndex] = list[i];
        list[i] = currentMin;
      }
      counter += 1;
    }

      System.out.println("The size of the sorted array is " + list.length + " and the count is " + counter);
  }

我准备了下面的主要方法。

public static void main(String[] args) {
      final int NUM_ELEMENTS = 10;

      double[] lo2Hi = new double[NUM_ELEMENTS];
      for (int i = 0; i < NUM_ELEMENTS; i++) {
          lo2Hi[i] = i + 1;
      }
      selectionSort(lo2Hi);
      double[] hi2Lo = new double[NUM_ELEMENTS];
      for (int i = 0; i < NUM_ELEMENTS; i++) {
          hi2Lo[i] = 10 - i;
      }
      selectionSort(hi2Lo);
      double[] random = new double[NUM_ELEMENTS];
      for (int i = 0; i < random.length; i++) {
          random[i] = Math.random();
      }
      selectionSort(random);
  }

您在 selectionSort() 末尾的 println() 试图访问变量 counter,但此时 counter 是 "out of scope"。变量仅存在于它们在内部声明的一对 {} 中(这就是 "scope")。

int counter = 0; 语句移出 for 循环,并将其放在方法的顶部。然后它将在打印语句的范围内。