【发布时间】:2021-08-15 14:46:50
【问题描述】:
我正在制作一个程序,通过将最大值移到末尾来排列数组,但由于某种原因,该程序没有按菜单排列值。 我该如何解决?
public static void main(String args[]) {
ArrayList<Integer> list = new ArrayList<>();
list.add(15);
list.add(78);
list.add(44);
list.add(99);
list.add(32);
int num = 1;
for(int i = 0; i<=list.size() -1;){
if(list.get(i) > list.get(i+1)){
list.add(list.get(i));
list.remove(i);
System.out.println(list);
}
else{
i+=1;
num+=1;
}
}
}
这是我得到的:
[15, 44, 99, 32, 78]
[15, 44, 32, 78, 99]
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 5 out of bounds for length 5
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:458)
at MyClass.main(MyClass.java:10)
【问题讨论】:
-
仅
list.sort();怎么样? -
你得到什么输出?你期待什么输出?
-
注意:
i <= list.size() -1可以重写为i < list.size()。 -
这就是我得到的:"""[15, 44, 99, 32, 78] [15, 44, 32, 78, 99] 线程“main”中的异常 java.lang.IndexOutOfBoundsException :在 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 在 java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 的索引 5 超出了长度 5 ) 在 java.base/java.base/java.util 的 java.base/java.util.Objects.checkIndex(Objects.java:372) 的 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)。 ArrayList.get(ArrayList.java:458) 在 MyClass.main(MyClass.java:10)"""
-
您的
i上升到列表的最后一个元素,此时list.get(i+1)位于列表末尾之后,因此会引发异常。