我对编程非常陌生,并且学习了Java中的forEach循环。据我所知,它是经典for循环的较短版本。我的问题是,如何使用forEach将值保存到数组中还是只读?
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
for (int i : arr) {
arr[i] = i;
}
但是我的数组是[0,0,0,0,0]。 (当然可以,但是我可以以某种方式对其进行修改吗?)
如果没有其他方法可以代替普通的for循环?
答案 0 :(得分:2)
简短的回答:不,没有办法。
更长的答案:通过for-each循环,您会丢失索引信息,即在该循环内,您不知道要处理的是第一个,第二个还是第一百个元素。您需要索引以寻址要在数组中写入的位置。因此,仅使用for-each是不可能的。
注意::在您的示例中,第一个循环只是使用其索引覆盖了数组的元素。您会得到
arr = { 0, 1, 2, 3, 4 }
。 第二个循环只能用,因为它会偶然地遍历一个数组,这些数组的元素是它们自己的索引,就像您之前定义的那样。例如,如果您的数组是“ arr = {42,101,-73,0,5}”,则第一次迭代将尝试仅使用五个元素访问数组的第43个元素,从而导致异常。
您可以创建并增加自己的索引计数器,但这实际上是常规的for循环以非常方便的方式进行的操作。
常规for循环:
for (int index = 0; index < arr.length; index++) {
var element = array[index];
use(element);
}
每个循环:
for (int element : arr) {
// the current index is unknown here
use(element);
}