2016-12-17 180 views
0

我正在編寫Sudoku解算器,我的老師建議我使用3d數組,因爲我從來沒有使用過3D數組;我無法弄清楚如何創建循環遍歷行和遍歷列。你會如何去做這件事?通過3d數組迭代?

編輯:我想出瞭如何遍歷每第三列/行,並希望我應該能夠最終完成其他六個,但我是否朝着正確的方向前進?

int[][][] = board[9][3][3]; 

public boolean columnCheck(int[][][] board) 
{ 
    boolean filled = false; 
    for(int i = 0; i < board.length; i++) 
    { 
     for(int j = 0; j < board[0].length; j++) 
     { 
      System.out.println(board[i][j][0]);     
     } 

    } 
    return true; 
} 

public boolean rowCheck(int[][][] board) 
{ 
    boolean filled = false; 
    for(int i = 0; i < board.length; i++) 
    { 
     for(int j = 0; j < board[0].length; j++) 
     { 
      System.out.println(board[i][0][j]); 
     } 

    } 
    return true; 
+0

提示:'board.length'會給你9 ...如果你使用'board [0]'給你一個'int [] []'。如果你知道如何處理二維數組,那麼你應該很好... –

回答

2

可以使用3個for循環通過3D陣列迭代,例如:

public static void main(String[] args) throws FileNotFoundException { 
    int[][][] array = new int[9][3][3]; 
    for(int i=0 ; i<array.length ; i++){ 
     for(int j=0 ; j<array[i].length ; j++){ 
      for(int k=0 ; k<array[i][j].length ; k++){ 
       System.out.println("[" + i + "][" + j + "][" + k + "]:" + array[i][j][k]); 
      } 
     } 
    } 
} 

然而,數獨遊戲,你並不需要一個三維陣列。二維數組就足夠了。

+0

它的工作原理,但我覺得這樣的代碼不可讀。爲什麼3D陣列?哪一個是寬度,哪個是高度,第二個是什麼?等等......我會把它包裝在一些自我評論的抽象層中。但是,這是迭代3D數組問題的正確答案。 – PiotrK

2
public class Main { 

    public static void main(String[] args) { 
     int[][][] board = new int[3][3][9]; 
     // Assume that first parameter is row 
     // The second is column 

     // Iterating through first row (board[0]) 
     for (int i = 0; i < 3; i++) { 
      // i is col number 
      for (int j = 0; j < 9; j++) { 
       //j is block number 
       System.out.println(board[0][i][j]); 
      } 
     } 

     // Iterating through second column 
     for (int i = 0; i < 3; i++) { 
      // i is row number 
      for (int j = 0; j < 9; j++) { 
       // j is block number 
       System.out.println(board[i][1][j]); 
      } 
     } 
    } 
} 
0

我假設你的三維陣列代表的數獨如下: 的「9」代表的是9個小的3x3塊。塊的每一行的第一個'3'和每個塊的列的第二個'3'。

這將給出如下:

array[0][x][y] | array[1][x][y] | array[2][x][y] 
---------------------------------------------------- 
array[3][x][y] | array[4][x][y] | array[5][x][y] 
---------------------------------------------------- 
array[6][x][y] | array[7][x][y] | array[8][x][y] 

遍歷每一行,你可以做到以下幾點:我希望這將讓你去

// The first three rows 
// You can probably figure out yourself how to do the last 6, 
// and how to combine those 3 seperate sections 
for (int i=0; i<3; i++) { 
    for (int j=0; j<3; j++) { 
     for (int k=0; j<3; k++) { 
      System.out.println(array[j][i][k]); 
     } 
    } 
} 

// The first three columns 
for (int i=0; i<3; i++) { 
    for (int j=0; j<7; j+=3) { 
     for (int k=0; k<3; k++) { 
      System.out.println(array[j][k][i]); 
     } 
    } 
} 

,不解決這一切爲您服務。