我正在尝试构建一个 java 分拣机,但我一直收到错误消息
I am trying to build a java sorter, but I keep getting an error
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)
排队
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]
考虑变量i
。它从 0
到数组的 length
。您的数组有 18
个元素,编号为 0
到 17
。变量 j
设置为 i+1
的值。当外循环中i
为17
时,j
会被设置为18
。索引 18
(arr[18]
) 超出数组末尾。
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)
排队
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]
考虑变量i
。它从 0
到数组的 length
。您的数组有 18
个元素,编号为 0
到 17
。变量 j
设置为 i+1
的值。当外循环中i
为17
时,j
会被设置为18
。索引 18
(arr[18]
) 超出数组末尾。