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



使用我已经拥有的这段代码,我想修改 selectionSort 方法以具有两个计数器,一个用于比较次数,另一个用于数据交换次数。每次比较两个数据元素时(无论项目顺序是否正确 - 我们都对正在进行比较感兴趣(,增加比较计数器。 每次实际交换两个数据项时,递增数据交换计数器。

到目前为止,这就是我尝试添加计数器的内容。但是,我收到错误"未解决的编译问题:计数器无法解析为变量"。

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"超出范围"。变量只存在于它们在其中声明的{}对中(这就是"范围"(。

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

最新更新