JAVA:在for循环

时间:2017-10-05 03:55:39

标签: java arrays java.util.scanner

我已阅读有关此主题的帖子,但我无法解决我在初始化2d int数组时遇到的问题,在for循环中使用多个1d数组。

以下是我的代码段,其中包含以下内容:

  1. 从std输入中读取字符串中的一行。
  2. 将此行转换为1d int数组(通过拆分字符串)
  3. 按顺序用每个1d数组填充2d数组的行
  4. 约束:

    1. 输入的大小是已知的(行数和列数),它将始终为整数。

      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));
      }
      
    2. 我面临的问题是每次使用新的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阵列。

1 个答案:

答案 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数组中存储值时,您都要为其所有引用设置值。您需要为每个循环重新初始化它们。这应该解决这个问题。