我正在尝试制作一个阵列分拣机。但是我收到一个错误:
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!");
}
}
}
}
}
temp
不是数组索引:你为它分配了list[i]
,它是一个数组元素。
int temp = list[i];
和list[i + 1] = list[temp];
是引起问题的线。
temp
可能超过列表的大小,你怎么能访问list[temp]
,你可能想用list[i+1] = temp
取代它
你的问题是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];
*/
所有上述行都没用。