我正在尝试构建Java排序器,但我不断收到错误消息

时间:2020-04-19 00:15:38

标签: java indexoutofboundsexception

public class Sorter{
  public static void main(String[] args) {
    int[] arr = {9, 3, 5, 6, 2, 2, 53, 5, 75, 78, 68, 6, 5, 44, 5, 63356, 242, 25};

    for (int i = 0; i < arr.length; i++) {
      int minIndex = i;

      for (int j = i + 1; i < arr.length; j++) {
        if (arr[j] < arr[i]) {
          minIndex = j;
        }
      }

      int temp = arr[i];
      arr[i] = arr[minIndex];
      arr[minIndex] = temp;
    }
  }
}

应该对数组进行排序,但出现此错误。我真的很困惑该怎么办。我正在尝试使用选择排序算法。

java.lang.ArrayIndexOutOfBoundsException: 18
   at Sorter.main(Sorter.java:8)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

2 个答案:

答案 0 :(得分:1)

在线

for (int j = i + 1; i < arr.length; j++)

您应将条件更改为j < arr.length(将i替换为j)。您的排序代码也有另一个问题。 您为j的检查arr索引编写了if语句的行是否较小。您应该将条件更改为arr[j] < arr[minIndex](用i替换minIndex)。

此编辑后的代码应为此。

public static void main(String[] args) {
    int[] arr = {9, 3, 5, 6, 2, 2, 53, 5, 75, 78, 68, 6, 5, 44, 5, 63356, 242, 25};

    for (int i = 0; i < arr.length; i++) {
        int minIndex = i;

        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }

        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }

    System.out.println(Arrays.toString(arr));
}

输出:

[2, 2, 3, 5, 5, 5, 5, 6, 6, 9, 25, 44, 53, 68, 75, 78, 242, 63356]

答案 1 :(得分:1)

考虑变量i。它从数组的0length。您的数组有18个元素,编号为017。变量j设置为i+1的值。当外部循环中的i17时,j将被设置为18。索引18arr[18])在数组的末尾。