在 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
循环,并将其放在方法的顶部。然后它将在打印语句的范围内。
利用我已有的这段代码,我想修改 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
循环,并将其放在方法的顶部。然后它将在打印语句的范围内。