我正在做免费代码营初学者教程,我对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