有没有一种方法可以使用forEach将值分配给Array?

时间:2020-01-24 10:15:24

标签: java for-loop foreach

我对编程非常陌生,并且学习了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循环?

1 个答案:

答案 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);
}