我已阅读有关此主题的帖子,但我无法解决我在初始化2d int数组时遇到的问题,在for循环中使用多个1d数组。
以下是我的代码段,其中包含以下内容:
约束:
输入的大小是已知的(行数和列数),它将始终为整数。
Scanner in = new Scanner(System.in);
String[] line = new String[8];
String[] rows = new String[7];
int[] row_int = new int[7];
int player=0,j=0;
for (int i =0; i <3 ;++i) {
line[i] = in.nextLine();
System.out.println("REading ..."+line[i]);
rows = line[i].split("\\s+");
j=0;
for (String s : rows) {
row_int[j]=Integer.parseInt(s);
j++;
}
input[i]=row_int;
System.out.println(Arrays.toString(row_int)+" for the value of i "+i);
System.out.println("The Array is \n"+Arrays.deepToString(input));
}
我面临的问题是每次使用新的1d数组值时,2d数组的值都会被覆盖: 以下是示例输出:
1 2 3 4
REading ...1 2 3 4
[1, 2, 3, 4, 0, 0, 0] for the value of i 0
The Array is
[[1, 2, 3, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]]
4 5 6
REading ...4 5 6
[4, 5, 6, 4, 0, 0, 0] for the value of i 1
The Array is
[[4, 5, 6, 4, 0, 0, 0],
[4, 5, 6, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]]
33 44 55
REading ...33 44 55
[33, 44, 55, 4, 0, 0, 0] for the value of i 2
The Array is
[[33, 44, 55, 4, 0, 0, 0],
[33, 44, 55, 4, 0, 0, 0],
[33, 44, 55, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]]
缩进输出以提高可读性。
请建议,如果有更好的方法来初始化具有1d阵列的2d阵列。
答案 0 :(得分:0)
Scanner in = new Scanner(System.in);
String[] line = new String[8];
String[] rows = new String[7];
int player=0,j=0;
for (int i =0; i <3 ;++i) {
line[i] = in.nextLine();
System.out.println("REading ..."+line[i]);
rows = line[i].split("\\s+");
j=0;
int[] row_int = new int[7]; //reinitializing the variable on each loop
for (String s : rows) {
row_int[j]=Integer.parseInt(s);
j++;
}
input[i]=row_int;
System.out.println(Arrays.toString(row_int)+" for the value of i "+i);
System.out.println("The Array is \n"+Arrays.deepToString(input));
}
你的问题是row_int
变量的内存在每个循环中被重用。因此,每次在row_int
数组中存储值时,您都要为其所有引用设置值。您需要为每个循环重新初始化它们。这应该解决这个问题。