【问题标题】:Using a for loop to iterate through a 2D array使用 for 循环遍历二维数组
【发布时间】:2016-01-20 17:45:45
【问题描述】:

我正在尝试编写一个循环来遍历二维数组并对每个子数组求和。

目前我的代码如下:

int[][] data = { { 10, 20 }, { 20, 10 }, { 50, 60 }, { 45, 20 }, { 10, 35 }, { 25, 16 } };
int[] sumOfArrays = new int[5];

    for (int[] i : data) {
        int sum = 0;
        for (int x : i) {
            sum =+ x;
        }
        sumOfArrays[i] = sum;
    }

    System.out.println(sumOfArrays);

由于类型不匹配,这是不可能的:(i) int[] - int

我该如何解决这个问题?

【问题讨论】:

    标签: java arrays for-loop multidimensional-array


    【解决方案1】:

    这里有一些问题。让我们从咬你最深的那个开始吧。

    for (int[] i : data) {
        int sum = 0;
        for (int x : i) {
            sum =+ x;
        }
        sumOfArrays[i] = sum;
    }
    

    在这些嵌套循环的上下文中,i 引用 int[] 引用,因此您不能使用它来索引任何内容。

    一般来说,在处理 foreach 循环时,通常会失去对它们进行索引的能力,因此在尝试这样做时应该小心。

    为此,您必须引入一个新变量。还要确保翻转你的作业;你想要+= 而不是=+,因为前者只是分配给一个有保证的正值。

    int idx = 0;
    for (int[] i : data) {
        int sum = 0;
        for (int x : i) {
            sum += x;
        }
        sumOfArrays[idx++] = sum;
    }
    

    接下来,你的数组是一个元素太短了——你有六行,但你只为 5 行分配了空间。修复这个大小,然后上面的代码就可以正常工作了。

    【讨论】:

      【解决方案2】:

      您试图将i 视为索引,但它是一个值——您当前所在的int[] 行。

      您可以保留一个单独的 index 变量,该变量在 i for 循环结束时递增。

      int index = 0;
      for (int[] i : data) {
          int sum = 0;
          for (int x : i) {
              sum += x;  // +=, not =+
          }
          sumOfArrays[index] = sum;
          index++;
      }
      

      另一种方法是切换到“标准” for 循环,这样您就可以将索引变量定义为 for 循环的一部分,自己获取 int[]

      无论哪种方式,您都需要在代码末尾使用Arrays.toString to print the contents of sumOfArrays

      此外,sumOfArrays 的长度与data 的长度不匹配,因此您将获得ArrayIndexOutOfBoundsException。试试

      int[] sumOfArrays = data.length;
      

      【讨论】:

        【解决方案3】:
            int[][] data = { { 10, 20 }, { 20, 10 }, { 50, 60 }, { 45, 20 }, { 10, 35 }, { 25, 16 } };
            int[] sumOfArrays = new int[data.length];
        
            for (int i = 0; i < data.length; i++) {
                int sum = 0;
                for (int x : data[i]) {
                    sum += x;
                }
                sumOfArrays[i] = sum;
            }
        
            System.out.println(Arrays.toString(sumOfArrays));
        

        【讨论】:

        • 啊@Makoto 已经解释过了,那我就不用解释出了什么问题了:)
        • 已编辑,没看到你做了 =+ 而它需要 +=
        • 不是完全相同的代码:for 循环更改为常规 for 循环,其值用作原始二维数组的索引和新的总和数组
        • 这并没有使答案变得更好。它只是一个代码转储。它没有解释任何东西。
        • @Makoto 打算添加一个解释,但后来看到你已经发布了你的,我什至在这个答案的第一条评论中这么说......
        猜你喜欢
        • 2014-12-22
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多