制作数组排序器[重复]

问题描述 投票:0回答:3

我正在尝试制作一个阵列分拣机。但是我收到一个错误:

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


    }



}
java exception
3个回答
2
投票

temp不是数组索引:你为它分配了list[i],它是一个数组元素。


2
投票

int temp = list[i];list[i + 1] = list[temp];是引起问题的线。

temp可能超过列表的大小,你怎么能访问list[temp],你可能想用list[i+1] = temp取代它


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

所有上述行都没用。

© www.soinside.com 2019 - 2024. All rights reserved.