制作阵列分拣机

时间:2018-03-02 14:38:53

标签: java exception

我正在尝试制作数组排序器。但是我收到了一个错误:

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!");
                }
            }
        }


    }



}

3 个答案:

答案 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];
 */

以上所有行都没用。