2016-12-17 3 views
0

私はSudokuソルバーをコーディングしています。先生は3dアレイを使用することを勧めました。私は、行を繰り返すループと列を繰り返すループを作成する方法を理解するのに問題があります。あなたはこれについてどうやって行きますか?3D配列を繰り返しますか?

編集:3番目の列/行を繰り返し処理する方法を理解しています。他の6つをやり直すことができたらいいと思いますが、正しい方向に向いていますか?

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'は' board [0] 'を使うと' int [] [] 'を与えます。 2D配列を扱う方法がわかっているなら、あなたはうまくいくはずです... –

答えて

2

あなたは、3D配列、例えばを反復処理するために3つのforループを使用することができます。:

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]); 
      } 
     } 
    } 
} 

しかし、数独ゲームのために、あなたは、3Dの配列を必要としません。 2Dアレイで十分です。

+0

それはうまくいきますが、私はそのようなコードが本当に読みにくいと感じています。なぜ3Dアレイですか?どちらが高さで、2番目のものは幅ですか?そういうわけで、私はそれをいくつかの自己解説の抽象レイヤーに包んでいます。しかし、これは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

私は次のようにあなたの3D配列が数独を表しているとします 「9」は9つの小さな3x3のブロックの略です。ブロックの各行の最初の「3」、各ブロックの列の2番目の「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]); 
     } 
    } 
} 

私は、これはあなたがあなたのためにすべてを解決せずに、軌道に乗ることを願っています。