交换价值程序会引发错误

时间:2015-11-01 03:59:41

标签: java

为了清楚起见,我已经完成了我对我得到的错误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;
        }
    }
}

感谢任何帮助:)先谢谢

3 个答案:

答案 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。