Java:找到2d数组的总和

时间:2018-04-22 14:26:21

标签: java arrays 2d

好的,这听起来很简单。但它现在已经玩了一会儿。

我需要创建一个方法来查找2d整数数组的总和。

我需要创建方法:

public static int sum(int[][] array) 

这是我到目前为止所做的:

public static int sum(int[][] array){
int sum1 = 0;
    for (int i : array)
        sum1 += i;

    return sum1;
}

但我收到错误'incompatible types required int[] found int.' 有谁可以帮助我完成这项挑战?

感谢。 编辑: 示例数组将是:

3 -1  4  0
5  9 -2  6 
5  3  7 -8

现在他们将始终采用这种格式(4x3)。

6 个答案:

答案 0 :(得分:1)

由于array是2维,因此您无法在int i: array循环中指定for。像这样修改你的代码:

public static int sum(int[][]array){
int sum1 = 0;
for (int[] arr : array)
    for(int i: arr)
        sum1+=i;

return sum1;
}  

修改
要存储每行的总和,请使用整数数组。

public static int[] sum(int[][]array){
int sum = 0;
int sumOfRow[] = new int[array.length];
for(int i=0;i<array.length;i++){
    sum=0;
    for(int num: array[i]){
        sum1+=num;
    }
    sumOfRow[i] = sum;
}

return sumOfRow;
}

答案 1 :(得分:0)

您的array声明为int[][],这实际上意味着int[]的数组。也就是说,array的元素具有类型int[],它们本身就是数组(这就是array是“2D”数组的原因)。当您编写for-each循环时,请确保您的类型匹配:

for (int[] innerArray : array) {
    // do things with innerArray, which is a 1D int[]
}

完整的解决方案如下所示:

public static int sum(int[][] array) {
    int sum = 0;
    for (int[] innerArray : array)
        for (int i : innerArray)
            sum += i;
    return sum;
}

答案 2 :(得分:0)

方法内部的逻辑应该是:

for (int[] i : array)
   for(int num : i)
        sum1+=num;

i类型为int[],而非int。第二个循环是枚举数组i,使我们能够访问其中的数字并将其添加到sum1变量。

此外,从Java-8开始,您可以完成以下任务:

public static int sum(int[][]array){
      return  Arrays.stream(array)
                    .flatMapToInt(Arrays::stream)
                    .sum();
}

答案 3 :(得分:0)

您不能直接+数组,请参阅jls

  

如果+运算符的任一操作数的类型是 String ,那么   操作是字符串连接。

     

否则,+运算符的每个操作数的类型必须   是可转换(第5.1.8节)到原始数字类型的类型,或   发生编译时错误。

因此,如果没有操作数是String,则加法运算符仅适用于:

  • 字节,字节
  • 短,短
  • Character,char
  • Integer,int
  • 很长很长
  • 漂浮,漂浮
  • Double,double

解决方案

您可以通过嵌套循环实现此目的:

public static int sum2D(int[][] matrix){
    int sum = 0;
    for (int[] array : matrix) {
        for (int element : array) {
            sum += element;
        }
    }
    return sum;
}

或创建另一种方法来计算一维数组的总和:

public static int sum2D(int[][] matrix){
    int sum = 0;
    for (int[] array : matrix)
        sum += sum1D(array);
    return sum;
}

public static int sum1D(int[] array){
    int sum = 0;
    for (int number : array)
        sum += number;
    return sum;
}

答案 4 :(得分:0)

这样做的规范方法是使用两个嵌套循环,每个循环覆盖二维数组的一个维度:

for (int r=0; r < array.length; ++r) {
    for (int c=0; c < array[r].length; ++c) {
        sum += array[r][c];
    }
}

Demo

答案 5 :(得分:0)

public static int sum(int[][] array) 
{
int sum1 = 0;
for (int row=0; row < array.length; ++row)
{
    for(int col=0; col<array[row].length; ++col)
    {
        sum1 = sum1 + array[row][col];
    }
  } return sum1;
}

可在此处找到更多信息:Finding the sum of the values in a 2D Array in C#

逻辑依然健全