如何对二维数组求和?

时间:2015-06-28 12:49:45

标签: java arrays

我已经创建了一个练习二维数组的简短代码,但我偶然发现了一个我无法在代码中解决的问题。希望你们能帮助我。

期望输出:

输入数字:1
输入数字:2
输入数字:3

你输入的数字:
1
2
3

TOTAL:6

输入数字:1
输入数字:2
输入数字:3

你输入的数字:
1
2
3

TOTAL:6

但相反,我看到了这一点:

输入数字:1
输入数字:2
输入数字:3

你输入的数字:
1
2
3

TOTAL:6

输入数字:1
输入数字:2
输入数字:3

你输入的数字:
1
2
3

TOTAL:12

______________________________________________________

它将我输入的每个数字相加,而不是在每次迭代中添加三个数字。请检查以下代码:

第一部分

package Test;

 public class Test1 {
   private int[][] number;
   private int number1;
   public Test1(int[][]n){
      number = new int[2][3];
    for(int dx = 0;dx < number.length;dx++){
        for(int ix = 0;ix < number[dx].length;ix++){
            number[dx][ix]=n[dx][ix];
        }

    }
}

public Test1(int n){
    number1 = n;
}

public int getTotal(){
    int total = 0;

    for(int dx = 0;dx < number.length;dx++){
        for(int ix = 0;ix < number[dx].length;ix++){
            total += number[dx][ix];
        }

    }

    return total;
}

public int getNumbers(){

    return number1;
}

}

第二部分

  package Test;
  import java.util.Scanner;
  public class TestMain {
  public static void main(String[]args){
    final int DIVS = 2;
    final int NUM_INSIDE = 3;
    Test1[][] t1 = new Test1[DIVS][NUM_INSIDE];
    int[][]numbers = new int[DIVS][NUM_INSIDE];
    getValues(numbers,DIVS,NUM_INSIDE,t1);

}

public static void getValues(int[][]numbers,int DIVS,int NUM_INSIDE,Test1[][] t1){
    Scanner hold = new Scanner(System.in);
    int num;
    for(int div = 0;div < DIVS;div++){
        for(int ins = 0;ins < NUM_INSIDE;ins++){
            System.out.print("Enter number:");
            numbers[div][ins]=hold.nextInt();
            num = numbers[div][ins];
            t1[div][ins] = new Test1(num);

        }
        Test1 t = new Test1(numbers);
        display(t,t1,div);

    }
}

public static void display(Test1 t,Test1[][] t1,int div){
    System.out.print("****************************\n");
    System.out.print("NUMBERS THAT YOU ENTERED:\n");

    for(int y = 0; y < t1[div].length;y++){
        System.out.print(t1[div][y].getNumbers() + "\n");
    }

    System.out.print("****************************\n");
    System.out.print("TOTAL: " + t.getTotal() + "\n");
    System.out.print("****************************\n");
}
}

3 个答案:

答案 0 :(得分:1)

您的getTotal方法总结了二维数组的所有元素。因此,考虑将变量传递给方法,以指示要评估的2d数组的哪一行。所以你的getTotal方法可以是这样的:

public int getTotal(int row){
int total = 0;   
    for(int ix = 0;ix < number[row].length;ix++){
        total += number[row][ix];
    }

}

return total;

}

在主函数中,您可以使用计数器变量跟踪行号。最后使用行号

调用getTotal方法
 System.out.print("TOTAL: " + t.getTotal(div) + "\n"); 

答案 1 :(得分:0)

您的getTotal()方法会对2D数组中的所有值求和。在读取第一个输入行后,第二行仍包含默认值(0s),因此您可以获得第一行中元素的总和。

读取第二个输入行后,您将获得两行的总和。

答案 2 :(得分:0)

如果要对2d数组中的所有数字求和,则应使用此方法替换getValues

public static void getValues(int[][]numbers,int DIVS,int NUM_INSIDE,Test1[][] t1){
  Scanner hold = new Scanner(System.in);
  int num;
  Test1 t;
  for(int div = 0;div < DIVS;div++){
      for(int ins = 0;ins < NUM_INSIDE;ins++){
          System.out.print("Enter number:");
          numbers[div][ins]=hold.nextInt();
          num = numbers[div][ins];
          t1[div][ins] = new Test1(num);

      }
  }
  // out of loops
  t = new Test1(numbers);
  display(t,t1,DIVS-1);
}

但如果你想在每一行中加上数字,请参阅@Sourav Kanta的回答