【问题标题】:Input a 2D array using foreach loop [duplicate]使用foreach循环输入一个二维数组[重复]
【发布时间】:2018-03-13 14:35:36
【问题描述】:

我想将下面的传统for循环转换为foreach循环:

for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
        arr[i][j]=sc.nextInt();

我的尝试是:

for(int[] innerArr: arr)
    for(int ele: innerArr)
        ele = sc.nextInt();

这不起作用。我认为由于innerArr 代表数组的一行,而ele 代表该行中的单个元素,所以上面的代码可以工作。但我猜只有arr[i][j] 中该元素的现有值被复制到ele 中。甚至可以使用 foreach 循环为该元素分配一个值吗?

【问题讨论】:

  • 不,不可能。
  • 我在等你告诉我这是怎么可能的。

标签: java arrays for-loop foreach


【解决方案1】:

不,这是不可能的。增强的 for 循环为您提供了您正在迭代的数组元素(或 Iterable 的元素)的副本,因此为它们分配值不会更改原始数组(或 Iterable)。

您的增强 for 循环尝试等同于:

for(int i = 0; i < arr.length; i++) {
    int[] innerArr = arr[i];
    for(int j = 0; j < innerArr.length; j++) {
        int ele = innerArr[j];
        ele = sc.nextInt();
    }
}

在这种情况下,您应该坚持使用传统的 for 循环。

【讨论】:

    【解决方案2】:

    如果要写入元素,内循环不能是增强的 for 循环。你可以做的是:

    for(int[] innerArr : arr) {
      for(int i = 0; i < innerArr.length; i++) {
        innerArr[i] = scanner.nextInt();
      }
    }
    

    看看JLS14.14.2。然后你可以看到编译器对数组访问做了什么。

    【讨论】:

    • 那么,您是说这里的最佳答案行不通吗? stackoverflow.com/questions/18931332/…
    • 编辑:您的链接问题的答案是错误的。你应该坚持你的第一种方法或我的回答。
    • 谢谢,这完美!请详细说明该链接顶部答案中的代码将如何工作?我试过了,没有!也许我搞砸了?!
    • @SomenathSinha 不,它不会工作,它使代码编译,但它不会做你想要的,它总是更新相同的元素 [i][0]。在您的情况下,它将更新 [i][来自扫描仪的内容]
    • @Oleg 正是我的观察——它对我也不起作用!
    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2013-05-06
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多