Java 试图将数组从最大到最小排序,但出现错误
用户输入5个单独的数字后出现错误。 我不知道为什么会出现这个错误。Eclipse中没有显示错误,我能够运行代码 主线程java.lang.ArrayIndexOutOfBoundsException中的异常:5 在第8节,arraysLists.Main.mainMain.java:33 这是我的密码:Java 试图将数组从最大到最小排序,但出现错误,java,arrays,Java,Arrays,用户输入5个单独的数字后出现错误。 我不知道为什么会出现这个错误。Eclipse中没有显示错误,我能够运行代码 主线程java.lang.ArrayIndexOutOfBoundsException中的异常:5 在第8节,arraysLists.Main.mainMain.java:33 这是我的密码: 您正试图打印六个元素,但您的数组只有五个元素:数组的索引是从零开始的,那么五个元素的数组只有以下索引值:0、1、2、3、4 编辑 插入排序有三个错误: for (int i=0; i<s
您正试图打印六个元素,但您的数组只有五个元素:数组的索引是从零开始的,那么五个元素的数组只有以下索引值:0、1、2、3、4 编辑 插入排序有三个错误:
for (int i=0; i<sortedArray.length; i++) {
if (sortedArray[i] < sortedArray[i]+1) { // here you have
// to compare two consecutives array's values...
// in this manner this condition is always true!
temp = sortedArray[i];
sortedArray[i] = sortedArray[i]+1; // like previous one
sortedArray[i+1] = temp; // here --> ArrayOutOfBound when i = 4
flag = true;
}
}
也许正确的代码应该是:
for (int i=0; i<sortedArray.length - 1; i++) {
if (sortedArray[i] < sortedArray[i+1]) {
temp = sortedArray[i];
sortedArray[i] = sortedArray[i+1];
sortedArray[i+1] = temp;
flag = true;
}
}
看看这个循环:
for (int i=0; i<sortedArray.length; i++) {
if (sortedArray[i] < sortedArray[i]+1) {
temp = sortedArray[i];
sortedArray[i] = sortedArray[i]+1;
--->>> sortedArray[i+1] = temp;
flag = true;
}
}
现在循环的i值范围是0到4。这很好。然而,在指出的行中,您将尝试索引sortedArray[i+1]。当i==4时,这将成为sortedArray[5],这超出了范围,原因与您必须删除最后一行的原因相同
另外,您还将看到SorterDarray[i]+1,它将数组的值增加1。这可能是不正确的。我想你想做的是:
for (int i=1; i<sortedArray.length; i++) {
if (sortedArray[i-1] < sortedArray[i]) {
// The smaller value is in front of the bigger. We need to swap
temp = sortedArray[i];
sortedArray[i] = sortedArray[i-1];
sortedArray[i-1] = temp;
flag = true;
}
}
最后一行是错误的:System.out.PrintLElement 5是+sortedArray[5]。数组是零索引的,因此sortedArray[5]是只有五个元素的数组中的第六个元素。我建议使用一个循环来打印排序数组的内容。我删除了最后一行,现在我在线程main java.lang.ArrayIndexOutOfBoundsException:5在section8.ArrayLists.main.main.java:31中得到了这个错误异常。这是否回答了您的问题?射线[i+1]=温度;您在上一次迭代中引用了4+1个元素。但是我删除了最后一行,现在我在线程main java.lang.ArrayIndexOutOfBoundsException:5的第8节中得到了这个错误异常。ArrayLists.main.main.java:31现在编辑了应答器!谢谢我很高兴你发现这个解决方案很有用。在这些情况下,您可以通过单击答案旁边的复选标记来接受解决方案,将其从灰显切换为填充。非常感谢。谢谢这同样有效,但我更喜欢另一个答案,因为我只需要修改一件事,即在sortedArray.length的末尾添加-1
for (int i=0; i<sortedArray.length; i++) {
if (sortedArray[i] < sortedArray[i]+1) {
temp = sortedArray[i];
sortedArray[i] = sortedArray[i]+1;
--->>> sortedArray[i+1] = temp;
flag = true;
}
}
for (int i=1; i<sortedArray.length; i++) {
if (sortedArray[i-1] < sortedArray[i]) {
// The smaller value is in front of the bigger. We need to swap
temp = sortedArray[i];
sortedArray[i] = sortedArray[i-1];
sortedArray[i-1] = temp;
flag = true;
}
}