我正在尝试制作数组排序器。但是我收到了一个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
我不知道如何修复它。如果我用箭头删除该行,那么代码可以工作,但它不会交换。我做错了什么?
感谢您的帮助!
public class Main {
public static void main(String[] args) {
int[] list = {5, 3, 7, 2, 4, 8};
for (int i = 0; i < list.length; i = i + 2) {
if (i != list.length - 1) {
if (list[i] > list[i + 1]) {
int leftNumber = list[i];
int rightNumber = list[i + 1];
int src = i;
int temp = list[i];
list[i] = list[i + 1];
//--> list[i + 1] = list[temp];
System.out.println(leftNumber + " : " + rightNumber);
System.out.println(i + " : " + (i + 1));
System.out.println(Arrays.toString(list));
} else {
System.out.println("Good!");
}
}
}
}
}
答案 0 :(得分:2)
temp
不是数组 index :您为其分配了list[i]
,这是一个数组元素。
答案 1 :(得分:2)
int temp = list[i];
和list[i + 1] = list[temp];
是导致问题的行。
temp
可能超出列表大小,您如何访问list[temp]
,您可能希望将其替换为list[i+1] = temp
答案 2 :(得分:0)
你的问题是list [temp] ;.当临时值大于数组大小时,它将崩溃。您需要更正以下代码: -
list[i + 1] = leftNumber;
list[i ] = rightNumber;
它仍会在if condition
中崩溃,因此会更改您的for
循环,如下所示:
for (int i = 0; i < (list.length - 1); i = i + 2)
当您在此处交换已存储的值时,因此根本不需要以下代码行: -
/*
int src = i;
int temp = list[i];
list[i] = list[i + 1];
--> list[i + 1] = list[temp];
*/
以上所有行都没用。