变化,并保持在一个二维数组的值在循环

问题描述:

因此,这里是我到目前为止要去代码:变化,并保持在一个二维数组的值在循环

static int[][] change() throws IOException { 
    BufferedReader ein = new BufferedReader(new InputStreamReader(System.in)); 
    int i = 4; 
    int MatrixNew[][] = new int[i][i]; 

    for (int i = 0; i < MatrixNew.length; i++) { 
     for (int j = 0; j < MatrixNew[i].length; j++) { 
      if (MatrixNew[i][j] == 0) { //edit: added content from above into if 
       System.out.println("Enter numbers:"); // numbers entered like so: zse 
       String zf = ein.readLine(); 
       int z = Character.getNumericValue(zf.charAt(0)); 
       int s = Character.getNumericValue(zf.charAt(1)); 
       int e = Character.getNumericValue(zf.charAt(2)); 

       MatrixNew[z][s] = e; 

     } 
    } 
    return MatrixNew; 
} 

我得到由0个4×4场,​​除了4个特定位置。 通过输入zse我可以将所需位置([z][s])上的一个数字更改为所需的值(e)。它有点像数独领域。

我不知道的是我如何有效地重复“位置更改值”功能来替换所有0 s。

我试了一下while循环(12重复(固定数量)),但该字段没有保留我已经改变的数字,但再次显示0 s。

编辑:添加了if语句并将用户输入移动到if。 如果所有的0都被更改(正确的用户输入),则允许我重复用户输入12次,如果0未被更改(可能是错误的用户输入),则允许我重复用户输入12次。

现在唯一缺少的是在每次用户输入后打印2D阵列。

+0

你把环路放在哪里?也许你不小心把'MatrixNew'的初始化放在循环中,导致它每次都被重置。 – Arc676

+0

我把while循环放在change()被初始化的主函数中。 – Corazon

不是100%肯定是你所想达到的,但有几个困惑在此代码:

  1. 可以使用可变i两次 - 一次初始化数组,并一次作为循环计数器。它可能适用范围规则,但最好避免这种混淆。
  2. 您正在使用两个for循环来迭代该数组,但随后向用户请求指定要为其输入数字的单元。这是一个混乱,因为什么用户输入 - [z][s] - 独立于for循环迭代器 - [i][j]
  3. 增加了一个try()块从你的描述关闭流
  4. 不知道你想改变哪个单元( “期望值到期望值的一个数字”),但很显然你想每次都打印数组,所以我添加了该函数。

这是你想要做什么?

static int S = 4; // Don't use variable `i` twice. 

static int[][] change() throws IOException { 

    // Variable name starts with lower-case 
    int matrix[][] = new int[S][S]; 

    try(BufferedReader ein = new BufferedReader(new InputStreamReader(System.in))) { 
     for (int i = 0; i < matrix.length; i++) { 
      for (int j = 0; j < matrix[i].length; j++) { 
       System.out.println(String.format("Enter number for cell [%d,%d]:", i, j)); 
       String line = ein.readLine(); 
       int e = Character.getNumericValue(line.charAt(0)); 
       matrix[i][j] = e; 
       print(matrix); 
      } 
     } 
    } 
    return matrix; 
} 

static void print(int[][] m) { 
    for (int i = 0; i < m.length; i++) { 
     System.out.print("["); 
     for (int j = 0; j < m[i].length; j++) { 
      System.out.print(m[i][j]); 
      System.out.print(", "); 
     } 
     System.out.println("]"); // Only here has a "new line" 
    } 
}