2016-12-17 1 views
0

스도쿠 (Sudoku) 솔버를 코딩 중이며 선생님은 3D 배열을 사용하고 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

당신은

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

그러나, 스도쿠 게임을 위해, 당신은 3 차원 배열을 필요가 없습니다 :, 3 차원 배열을 통해 예컨대을 반복하는 3 개 for 루프를 사용할 수 있습니다. 2D 배열로 충분합니다.

+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

나는 다음과 같이 3 차원 배열이 스도쿠를 나타내는 가정 : 는 '9'는 9 개 작은 3 × 3 블록을 의미합니다. 블록의 각 행에 대한 첫 번째 '3'과 각 블록의 열에 대한 두 번째 '3'. 다음을 줄 것이다

: 당신을 위해 모든 것을 해결하지 않고,

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

나는 이것이 당신이 가야 바랍니다 :

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] 

당신이 다음을 수행 할 수 있습니다 각 행을 반복합니다.