为了清楚起见,我已经完成了我对我得到的错误Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
的研究。我一直在寻找一段时间,并没有提供任何解决方案。让我感到困惑的是发生错误的行。 **这不是来自带有**
我正在编写一个程序来交换数组的两个索引的值(一个更大的排序程序的一部分)。我收到错误Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
。错误指向我的代码if(data[i] > data[i+1]){
中的行。我无法弄清楚导致错误的原因,但我知道这可能是我想念的非常简单。
public static int length = 10;
public static int[] data = new int[length];
data[0] = 1;
data[1] = 10;
data[2] = 5;
data[3] = 11;
data[4] = 9;
data[5] = 2;
data[6] = 7;
data[7] = 9;
data[8] = 8;
data[9] = 10;
public static void exchange(){
int temp = 0;
for(int i=0;i<length;i++){
if(data[i] > data[i+1]){
temp = data[i+1];
data[i+1] = data[i];
data[i] = temp;
}
}
}
感谢任何帮助:)先谢谢
答案 0 :(得分:3)
由于您在下一个行中说i+1
,请使用类似
for(int i=0;i<length - 1;i++){
if(data[i] > data[i+1]){
或者,您可以使用类似
的内容for(int i=1;i<length;i++){
if(data[i-1] > data[i]){
temp = data[i];
data[i] = data[i-1];
data[i-1] = temp;
}
答案 1 :(得分:3)
通过执行i+1
,您尝试访问i
等于length - 1
时不存在的数组的索引(9)。您无法按照自己的方式访问变量。
答案 2 :(得分:2)
在for
循环的最后一次迭代中,i
等于9.您的if
语句会尝试将data[9]
与data[10]
进行比较,从而导致一个例外,因为data
中的最高索引是9。