【问题标题】:Summing up each row and column in Java总结Java中的每一行和每一列
【发布时间】:2014-03-05 16:43:58
【问题描述】:
/*
 * Programmer: Olawale Onafowokan
 * Date: February 6, 2014
 * Purpose: Prints the row and column averages
 */
class Lab4 {
    public static void main(String[] args) {
        int [][] scores = {{ 20, 18, 23, 20, 16 },
            { 30, 20, 18, 21, 20 },
            { 16, 19, 16, 53, 24 },
            { 25, 24, 22, 24, 25 }};
        outputArray(scores);
    }

    public static void outputArray(int[][] array) {
        int sum= 0;
        int rowSize = array.length;
        int columnSize = array[0].length;
        System.out.println("rows=" + rowSize + "cols=" + columnSize);

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[0].length; j++) {
                sum += array[i][j];
            }
            System.out.println("Print the sum of rows = " + sum);
        }
        for (int i = 0; i < array.length; i++) {
            sum = 0;
            sum = sum + array[i][j];
            // It is telling me the j can't be resolved
        }
    }
}

程序打印出来:

rows=4cols=5
Print the sum of rows = 612
Print the sum of rows = 20358
Print the sum of rows = 652058
Print the sum of rows = 20866609

我不明白为什么它没有正确地将数字相加。我正在尝试将每一行和每一列相加。我什至不确定这些数字是从哪里来的。

【问题讨论】:

    标签: java arrays row multiple-columns


    【解决方案1】:

    这是你的问题:

    sum += sum + array[i][j];
    

    sum += sum + array[i][j]sum = sum + sum + array[i][j] 相同(你加了两次总和

    应该是:

    sum = sum + array[i][j]; sum += array[i][j];

    如果您想打印每个仅行的总和,请将您的sum 重置为0,以便在外部for-loop 上进行每次迭代

    for (int i = 0; i < array.length; i++){
        sum=0;
        ....  
    

    如果你想打印每个列的总和,你需要添加这个:

    int[] colSum =new int[array[0].length];  
    

    然后在 for-loop 里面添加

    colSum[j]+=array[i][j]; 
    

    所以最后你会得到这个:

    int[] colSum =new int[array[0].length];
    for (int i = 0; i < array.length; i++){   
        for (int j = 0; j < array[i].length; j++){                
            sum += array[i][j];
            colSum[j] += array[i][j];
        }
        System.out.println("Print the sum of rows =" + sum);
    }  
    for(int k=0;k<colSum.length;k++){
        System.out.println("Print the sum of columns =" + colSum[k]);
    } 
    

    【讨论】:

    • 我明白了。但是公式将如何改变来做列?
    • @user3286008 你想打印每个20,30,16,2518,20,1924等等的总和?
    • 是的,适用于 20+30+16+20+25
    • 好的,我试过了,但由于某种原因,它告诉 j 无法解析 for (int i = 0; i
    • 非常感谢。 :D
    【解决方案2】:
     for (int i = 0; i < array.length; i++)
        {   
          sum=0;
          for (int j = 0; j < array[0].length; j++)
          {                
            sum += array[i][j]; 
    
          }
    
         System.out.println("Print the sum of rows =" + sum);
        }  
    

    尝试初始化 sum =0;

    对于列总和,您可以这样做

    class Sample{
        public static void main(String []args){
            int arr[][]={{1,2,3},{1,2,3},{1,2,3}};
            int sum=0;
            for(int col=0;col<arr[0].length;col++){
                for(int row=0;row<arr.length;row++){
                    sum+=arr[row][col];
                }
                System.out.println("Sum is "+sum);
                sum=0;
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您的外部循环(由 i 控制)对每一行执行一次。如果您想对一行中的所有数字求和,请在每个循环开始时将sum 设置为零。

      如果你有“sum = sum + x”,那会将 x 添加到 sum 并存储在 sum 中。如果你写“sum += x”,那将做同样的事情。但是你已经写了“sum += sum + x”,它把 sum AND x 添加到 sum。

      【讨论】:

        【解决方案4】:

        您不必使用运算符“+=”,只需使用“=”即可。

        【讨论】:

          【解决方案5】:

          顺便说一句,你的这个 for 循环超出了范围。 检查编译器:

          输出:当取出 sum = sum + array[i][j]

          行=4cols=5
          打印行的总和 = 97
          打印行的总和 = 206
          打印行的总和 = 334
          打印行的总和 = 454

          之后它会起作用,但它会给出所有行的总和而不破坏它们。

          for (int i = 0; i < array.length; i++) {
                  sum = 0;
                  sum = sum + array[i][j];
                  // It is telling me the j can't be resolved
              }
          //j is out of scope there is no such thing as j in this loop
          

          英文:伪代码

          添加一组行然后停止。 r1
          r2
          r3
          r4
          或数组,如果你想要 r[x]

          每次清理总和而不是将它们相加。
          所以你需要 4 行总和

          和 5 列总和
          c1
          c2
          c3
          c4
          c5

          所以你做一个循环进行水平求和 和一个垂直总和。

          也不要把你的名字放在作业的顶部。

          修复后输出
          行=4cols=5
          打印行的总和 = 97
          打印行的总和 = 109
          打印行的总和 = 128
          打印行的总和 = 120
          构建成功(总时间:0 秒)

          现在您需要对列执行 5 次此操作

          【讨论】:

            【解决方案6】:

            "你不必使用运算符"+=",只需使用"="。"

            ... 实际上他需要 += 但后来他用错了。

            从逻辑上讲,他的代码是错误的。

            它应该是 += 然后在外部 for 循环的每个实例之后,他应该将其切断 通过将值的总和再次重置为 0 以给出新值。

            【讨论】:

              【解决方案7】:
              public class Main {
                  public static void main(String[] args) {
                      ArrSort objArr = new ArrSort();
                      int[][] arr = {
                          {1,2,3},
                          {4,5,6},
                          {1,2,3}
                      };
              
                      objArr.getColsSum(arr);
              
                  }
              }
              
              class ArrSort {
                  public void getColsSum(int[][] arg){
                      int[] colsSum = new int[3];
                      colsSum[0] = 0;
                      colsSum[1] = 0;
                      colsSum[2] = 0;
              
                      for(int i = 0; i<arg.length; i++) {
                          for(int j = 0; j<arg[i].length; j++) {
                              System.out.print(arg[i][j] +" ");
                              if(j==0) {
                                  colsSum[j]+=arg[i][j];
                              } else if(j==1) {
                                  colsSum[j]+= arg[i][j];
                              } else {
                                  colsSum[j]+= arg[i][j];
                              }
                          }
                          System.out.println();
                      }
                      for(int i = 0; i<colsSum.length; i++){
                          System.out.print(colsSum[i] + " ");
                      }
                  } 
              }
              

              演示

              【讨论】:

                猜你喜欢
                • 2022-12-03
                • 1970-01-01
                • 1970-01-01
                • 2018-08-10
                • 2021-12-04
                • 2020-08-13
                • 2021-08-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多