我正在做免费freecodecamp入门教程,我在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检查值和索引是否没有切换,因为我之前使用了排序函数,但它们似乎没有问题。除此之外,一切都顺利顺利。IDK
发布于 2022-10-26 17:24:38
你从[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的代码将无法工作,以至于存在一个数字X,其中有Y = 2X
https://stackoverflow.com/questions/74211604
复制相似问题