我已经创建了一个练习二维数组的简短代码,但我偶然发现了一个我无法在代码中解决的问题。希望你们能帮助我。
期望输出:
输入数字: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");
}
}
答案 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的回答