问题描述
编写一个void方法selectionSortDescendTrace(),该方法采用一个整数数组,并将该数组按降序排序。该方法应使用嵌套循环,并在每次外部循环迭代后输出数组,从而将数组输出N-1次(其中N为大小)。完成main()以读取最多10个正整数(以-1结尾)的列表,然后调用selectionSortDescendTrace()方法。
如果输入是:
20 10 30 40 -1
然后输出为:
40 10 30 20
40 30 10 20
40 30 20 10
我的代码:
import java.util.Scanner;
public class MyProgram {
public static void selectionSortDescendTrace( int [] numbers,int numElements)
{
for (int i = 0; i < numbers.length - 1; i++) {
if(numbers[i] > 0) {
int maxElementIndex = i;
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[maxElementIndex] < numbers[j]) {
maxElementIndex = j;
}
}
int temp = numbers[i];
numbers[i] = numbers[maxElementIndex];
numbers[maxElementIndex] = temp;
for (int element: numbers) {
if(element > 0)
System.out.print(element + " ");
}
System.out.println("");
}
}
}
public static void main(String[] args){
Scanner scnr = new Scanner(system.in);
int input,i = 0;
int numElements = 0;
int [] numbers = new int[10];
do{
input = scnr.nextInt();
if(input != -1){
numbers[i] = input;
i++;
numElements++;
}
}while(input != -1);
selectionSortDescendTrace(numbers,numElements);
}
}
我的输出是:
40 10 30 20
40 30 10 20
40 30 20 10
40 30 20 10
我不确定为什么它重复最后一行两次...请帮助。
解决方法
问题出在您的selectionSortDescendTrace
方法的for循环中。因为循环运行numbers.length - 1
次(for (int i = 0; i < numbers.length - 1; i++)
)。 numbers.length
为10,因为您在main
方法中将数组的长度定义为10。
如果您像这样更改selectionSortDescendTrace
方法的第一个for循环中的条件,它将起作用:
public static void selectionSortDescendTrace(int[] numbers,int numElements) {
for (int i = 0; i < numElements - 1; i++)
if (numbers[i] > 0) {
//...
This question可能对了解如何查找此类bug很有帮助。