2015-11-01 28 views
0

因此,這裏是我到目前爲止要去代碼:變化,並保持在一個二維數組的值在循環

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

回答

0

不是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" 
    } 
}