我正在尝试编写循环来迭代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
我该如何解决这个问题?
答案 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));