我正在介绍Java课程,我只是想通过一些练习来领先于曲线,所以我正在制作一个冒泡排序程序。出于某种原因,它只会通过外循环两次。
public ArrayList SortArray(ArrayList<Integer> u) {
int temp;
int spot;
for (int isOrdered = 1; isOrdered == 1;) {
for (spot = 0; spot < u.size() - 1; spot ++) {
System.out.println(u.get(spot) + " " + u.get(spot + 1) + " " + spot);
if (u.get(spot) > u.get(spot + 1)) {
temp = u.get(spot + 1);
u.set(spot + 1, u.get(spot));
u.set(spot, temp);
isOrdered = 1;
}
else {
isOrdered = 0;
}
}
}
return u;
}
据我所知,在第二次迭代之后发生了什么,它并没有重置现场&#39;为0,所以它不会再次循环。有什么想法吗?
答案 0 :(得分:0)
嗯,对于初学者来说,这是一种使用for循环实现while循环的不寻常方式。尝试使用isOrdered
的布尔值和while(!isOrdered)
这样的语句。
正如Ted Hopp的评论所说,你的逻辑并不完全正确。你的代码所做的是它会在列表中对一个值进行排序,一旦该值“冒泡”,你的标志就会设置为true。
你需要外循环的条件是它一直运行直到所有单元格都有序。
现在你的旗子只是说它已经排序了,当你通过列表时,但当它通过列表而没有执行交换时它需要做的是真的。
尝试不用看就能实现,然后如果你不能得到它(我假设你有兴趣自己做,因为你在班上工作)看一下样本{{3 }}