2016-12-17 4 views
0

Ich kodiere einen Sudoku-Solver und mein Lehrer hat empfohlen, dass ich ein 3D-Array benutze und da ich noch nie 3D-Arrays benutzt habe; Ich habe Probleme herauszufinden, wie man eine Schleife erstellt, um durch die Zeilen und eins durch die Spalten zu iterieren. Wie würdest du das machen?Iterate durch ein 3D-Array?

Edit: Ich fand heraus, wie man durch jede dritte Spalte/Zeile iterieren und hoffentlich könnte ich die anderen sechs schließlich tun, aber gehe ich in die richtige Richtung?

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

Hinweis: 'board.length' gibt Ihnen 9 ... wenn Sie' board [0] 'verwenden, erhalten Sie ein' int [] [] '. Wenn Sie wissen, wie man mit 2D-Arrays umgeht, sollte es Ihnen gut gehen ... –

Antwort

2

können Sie 3 for Schleifen durch ein 3D-Array zu durchlaufen, z.B .:

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

jedoch für Sudoku-Spiel, müssen Sie nicht einen 3D-Array benötigen. 2D-Array würde ausreichen.

+0

Es funktioniert, aber ich finde solchen Code nicht wirklich lesbar. Warum 3D-Array? Welche ist die Breite, welche ist die Höhe und was ist die zweite? Und so weiter ... Ich würde es in einige selbstkommende Schichten der Abstraktion einbinden. Dies ist jedoch eine richtige Antwort auf die Frage der Iteration über ein 3D-Array. – 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

Ich nehme an, dass Ihre 3D-Array das Sudoku stellt sich wie folgt: Die '9' steht für die neun kleinen 3x3 Blöcke. Die erste '3' für jede Zeile des Blocks und die zweite '3' für die Spalten jedes Blocks.

, dass die folgenden würde:

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] 

Um jede Zeile durchlaufen Sie folgendes tun:

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

ich das hoffentlich erhalten Sie gehen, ohne das alles für Sie zu lösen.