【问题标题】:Is there a way to assign values into an Array with forEach?有没有办法使用 forEach 将值分配到数组中?
【发布时间】:2020-01-24 10:15:24
【问题描述】:

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

【问题讨论】:

  • forEach 方法不允许您直接访问索引,只能访问元素本身...我的意思是不使用流的那个...这个:for (int i : arr) { ... }
  • int[] arr = IntStream.range(0, 5).toArray();.
  • “据我所知,它是经典 for 循环的较短版本”,它是 增强 for 循环的一种严重受限的形式。 (您不能中断/返回、抛出检查异常、从 lambda 之外分配变量等)。
  • 别叫forEach,那是流中使用的方法;它被称为增强的for循环或,通常称为for-each循环

标签: java for-loop foreach


【解决方案1】:

简答:不,没有办法。

更长的答案:在 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-each 循环:

for (int element : arr) {
    // the current index is unknown here
    use(element);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2020-02-23
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多