public static void main(String[] args) {
//create array
int[] array = {99,45,1,51,11,71,22,33,44,55,32,64,88,76,89};
System.out.println("Before calling Selection Sort");
for(int i = 0; i<= array.length-1; i++) {
System.out.print(array[i]+ " ");
}
System.out.println();
selectionSort(array); //LINE 14
System.out.println("After calling Selection Sort");
for(int i=0; i<=array.length-1; i++) {
System.out.print(array[i]+ " ");
}
}
public static void selectionSort(int[] array) {
//finding minimum
int min=0;
for(int i=0; i<=array.length-1; i++) {
min = i;
for(int j = i+1; i<array.length-1; j++) {
if(array[j]>array[min]) { //LINE 28
min = j;
}
}
//swapping
if(array[i]>min) {
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
我得到: ArrayIndexOutofBoundsException:15 第28行出现错误, 第14行出现错误。这些问题已解决。现在,数字交换不正确。它们不是按升序排列的。请帮忙!
答案 0 :(得分:2)
在这部分代码中:
for(int j = i+1; i<array.length-1; j++) {
if(array[j]>array[min]) { //LINE 28
min = j;
}
您调用array[j]
,其中j = i + 1
或i
是迭代结束时数组的最后一个元素,因此array[i+1]
超出范围。
此外:
for(int j = i+1; i<array.length-1; j++)
必须通过
进行更改 for(int j = i+1; j<array.length-1; j++)
以下是输出正确的版本:
public static void main(String[] args) {
//create array
int[] array = {99,45,1,51,11,71,22,33,44,55,32,64,88,76,89};
System.out.println("Before calling Selection Sort");
for(int i = 0; i<= array.length-1; i++) {
System.out.print(array[i]+ " ");
}
System.out.println();
selectionSort(array); //LINE 14
System.out.println("After calling Selection Sort");
for(int i=0; i<=array.length-1; i++) {
System.out.print(array[i]+ " ");
}
}
public static void selectionSort(int[] array) {
//finding minimum
int min=0;
for(int i=0; i<array.length; i++) {
min = i;
for(int j = i+1; j<array.length; j++) {
if(array[j]<array[min]) { //LINE 28
min = j;
}
}
//swapping
if(array[i]>min) {
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
答案 1 :(得分:0)
问题是(int j = i+1; i<array.length-1; j++)
产生了一个边界异常,您应该使用j<array.length
来代替。试试这个
for(int i=0; i<=array.length-1; i++) {
min = i;
for(int j = i+1; j<array.length-1; j++) {
if(array[j]>array[min]) { //LINE 28
min = j;
}