Java 为什么程序没有对阵列进行排序?
我正在制作一个程序,通过将最大值移到末尾来排列数组,但由于某些原因,该程序没有按菜单排列值。 我怎样才能解决这个问题Java 为什么程序没有对阵列进行排序?,java,arrays,list,integer,Java,Arrays,List,Integer,我正在制作一个程序,通过将最大值移到末尾来排列数组,但由于某些原因,该程序没有按菜单排列值。 我怎样才能解决这个问题 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
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;
}
}
}
下面的代码是
IndexOutOfBoundsException
的原因。当i=4
,i+1=5
且列表中没有索引匹配时
if(list.get(i) > list.get(i+1)){
如果您想尝试气泡排序
,可以在下面进行尝试
for (int i = list.size() - 1; i >= 0; i--)
for (int j = 0; j < i; j++) {
if (list.get(j) > list.get(j + 1)) {
int temp = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}
}
System.out.println(list);
这项工作:
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);
for(int i = 0; i < list.size() - 1; i++){
for(int j = 0; j < list.size() - i - 1; j++){
if(list.get(j) > list.get(j + 1)){
int temp = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}
}
}
System.out.println(list);
}
publicstaticvoidmain(字符串参数[]){
ArrayList=新建ArrayList();
增加(15);
增加(78);
增加(44);
增加(99);
增加(32);
对于(int i=0;ilist.get(j+1)){
int temp=列表获取(j);
list.set(j,list.get(j+1));
列表设置(j+1,温度);
}
}
}
系统输出打印项次(列表);
}
首先,在列表上循环时向列表中添加和/或删除项目通常不是一个好主意。您很幸运它在这里工作,因为您正在添加和删除相同数量的项目,但最好在i
和最后位置交换项目:
int last = list.get(list.size() - 1);
list.set(list.size() - 1) = list.get(i);
list.set(i) = last;
但问题是:循环的索引(i
)从0变为4。在最后一个循环中,当您尝试list.get(i+1)
时,您尝试获取索引4+1=5
,但列表的大小只有5,因此没有索引5
在您的情况下,只需循环到最后一个索引,而不是最后一个索引:
for(int i = 0; i<=list.size() - 2;){
// Change from 1 to 2 ----^
for(int i=0;i如果要手动排序,则此代码可以工作:
while ( i < list.size()-1) {
if(list.get(i) > list.get(i+1)){
list.add(list.get(i));
list.remove(i);
i--;
} else {
i++;
}
}
仅使用list.sort();
如何?您得到了什么输出?您期望得到什么输出?注意:i这就是我得到的:“[15,44,99,32,78][15,44,32,78,99]线程“main”java.lang.IndexOutOfBoundsException:索引5超出了java.base/jdk.internal.util.Premissions.outOfBounds处长度5的界限在java.base/jdk.internal.util.Premissions.outOfBoundsCheckIndex(Premissions.java:70)在java.base/jdk.internal.util.Premissions.checkIndex(Premissions.java:248)在java.base/java.util.Objects.checkIndex(Objects.java:372)在java.base/java.util.ArrayList.get(ArrayList.java:458)在MyClass.main(MyClass.java:10)上“”您的i
将上升到列表的最后一个元素,此时list.get(i+1)
位于列表的末尾,因此它会引发异常。但我希望它进行排序menually@spider你可以看到我的更新。
for(int i = 0; i<=list.size() - 2;){
// Change from 1 to 2 ----^
while ( i < list.size()-1) {
if(list.get(i) > list.get(i+1)){
list.add(list.get(i));
list.remove(i);
i--;
} else {
i++;
}
}
Collections.sort(list);