public static void mystery1(ArrayList<Integer> list) {
for (int i = list.size() - 1; i > 0; i--) {
if (list.get(i) < list.get(i - 1)) {
int element = list.get(i);
list.remove(i);
list.add(0, element);
}
}
System.out.println(list);
}
我正在尝试使用给定的ArrayList values
集解决此方法的输出。在查看之后,我非常确定这段代码会重新定位列表前面的一对较小的值。我使用值[2, 6, 1, 8]
的ArrayList作为输入,结果是[1, 2, 6, 8]
,这正如我所料。但是对于[30, 20, 10, 60, 50, 40]
,当我预期[10, 30, 40, 20, 60, 50]
时,它会生成[40,50,10,20,30,60]
。因此,任何人都可以向我解释这段代码如何实际处理Arraylist
?谢谢!
答案 0 :(得分:1)
以下是一步一步发生的事情:
结果是:[10,30,40,20,60,50]
答案 1 :(得分:0)
我认为你忘记了循环从列表的末尾到开头。如果你把你给出的列表作为输入并按照这个过程你会得到结果[10,30,40,20,60,50]。哪个是正确的。只需用纸做,你就会看到。
答案 2 :(得分:0)
由于对您的问题的评论已经说明,看起来这个算法没有做到它所做的。这当然只能由原始代码的设计者验证;)。
现在简要介绍代码的作用,我将下面的每次迭代放入中间列表结果。第一个位置(冒号前)是迭代中索引的值。
// index 6, number 40 is less than 50, so 40 moves to the start of the list
result: 40 30 20 10 60 50
// index 5, number 60 is greater than 10, no changes made to the list
result: 40 30 20 10 60 50
// index 4, number 10 is less than 20, so 10 moves to the start of the list
result: 10 40 30 20 60 50
// index 3, number 30 is less than 40....
result: 30 10 40 20 60 50
// index 2, number 10 is less than 30....
result: 10 30 40 20 60 50
et瞧,有你的结果。