首页 > 解决方案 > 有没有办法用 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 循环吗?

标签: javafor-loopforeach

解决方案


简短的回答:不,没有办法。

更长的答案:使用 for-each 循环,您会丢失索引信息,即在循环中您不知道您是在处理第一个、第二个还是第 100 个元素。您需要索引来处理数组中要写入的位置。因此,仅使用 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);
}

推荐阅读