在Arraylist中使用forEach后的值错误



我正在做免费代码营初学者教程,我对Arraylist中的forEach函数有问题。以下代码


number1.forEach(number -> {
number1.set(number1.indexOf(number), number * 2);

});
System.out.println(number1);

值是[2,4,11,12],所以我希望得到[4,8,22,24],但我得到了[8,4、22,24]

有什么想法吗?

如上所述。我试着用indexOf检查值和索引是否没有切换,因为我之前使用了Sort函数,但它们似乎没问题。除此之外,一切都很顺利。IDK

[2, 4, 11, 12]开始

在第一次迭代期间,number = 2

然后呼叫number1.set(number1.indexOf(2), 2 * 2)

我们现在有[4, 4, 11, 12]

在第二次迭代中,number = 4

再次,我们称之为number1.set(number1.indexOf(4), 4 * 2)

问题是:indexOf返回该值的第一个实例的索引

所以,number1.indexOf(4) = 0,所以它将8放入索引0,而不是索引1

正如@Tibrogargan在评论中提到的那样,这是一个很好的例子,说明了为什么在中迭代时不应该修改数组

只要number1中存在编号Y,则number1的代码将不起作用,因此Y = 2X中存在编号为X

最新更新