使用for循环迭代2D数组

时间:2015-10-21 16:10:25

标签: java arrays for-loop multidimensional-array

我正在尝试编写循环来迭代2D数组并对每个子数组求和。

到目前为止,我的代码如下:

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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

这里有一些问题。让我们从最困难的那个开始吧。

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分配空间。修复那个大小然后上面的代码将正常工作。

答案 1 :(得分:1)

您正在尝试将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;

答案 2 :(得分:0)

    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));