2014-09-27 2 views
0

OK 그래서 스도쿠 (Sudoku) 솔버를 프로그래밍했습니다 .. 그리고 디버그를 실행하여 모든 것을 통과하는지 확인하십시오 ..하지만 .. 작동하지 않는 것 같습니다. 그것은 그것을 출력 할 것이고, "." 0으로 그러나 그것이가는 한 그것은 thats 다. 0으로 바뀌지 않습니다. 숫자가 반복 될 때 숫자로 바뀝니다.스도쿠 (Sudoku) 솔버 Java

public class SudokuSolver { 

int[][] sudoku; 
String data; 
public SudokuSolver() 
{ 
    getPuzzle(); 
    solvePuzzle(0,0); 
} 

private void getPuzzle() 
{ 
    try 
    { 
     Scanner in = new Scanner(new File("C:/Users/Ben/workspace/Sudoku  Solver/src/puzzle1.txt")); 
     sudoku = new int[9][9]; 
     for(int y = 0; y<9;y++) 
     { 
      for(int x = 0; x<9; x++) 
      { 
       data = in.next(); 
       if(data.equals(".")) 
        sudoku[x][y]=0; 
       else 
        sudoku[x][y] = Integer.parseInt(data);  
      } 
     } 
     in.close(); 
    } 
    catch(Exception e) 
    { 

    } 
    for(int y = 0; y<9; y++) 
    { 

     for(int x = 0; x<9; x++) 
     { 
      System.out.print(sudoku[x][y]); 
      if(x ==2 || x ==5) 
       System.out.print(" "); 
      if(x==8) 
      { 
       System.out.print("\n"); 
      } 

     } 
     if(y == 2|| y == 5) 
     { 
      System.out.println(" "); 
     } 
    } 

} 

private boolean isValid(int x, int y, int num) 
{ 
    int xSection = x/3; 
    int ySection = y/3; 

    for (int row = 0; row < sudoku.length; row++) 
    { 
     if(sudoku[row][y] == num) 
     { 
      return false; 
     } 
    } 
    for(int col = 0; col < sudoku.length; col++) 
    { 
     if(sudoku[x][col] == num) 
     { 
      return false; 
     } 
    } 


    for(int box = 3*xSection; box < 3*xSection + 3; box++) 
    { 
     for(int boxY = 3*ySection; boxY < 3*ySection + 3; boxY++) 
     { 
      if(sudoku[box][boxY] == num) 
      { 
       return false; 
      } 
     } 

    } 
    return true; 
} 

private int xPosition(int x, int y) 
{ 
    if(x<8) 
    { 
     return x+1; 
    } 
    else 
    { 
     return 0; 
    } 
} 

private int yPosition(int x, int y) 
{ 
    if(x<8) 
    { 
     return y; 
    } 
    else 
    { 
     return y+1; 
    } 
} 
private boolean solvePuzzle(int x, int y) 
{ 
    if(x >= 9 || y >= 9) 
    { 

     return true; 
    } 

    else 
    { 
     for(int num = 1; num < 10; num++) 
     { 
      if(isValid(x,y,num)) 
      { 
       sudoku[x][y] = num; 
       if(solvePuzzle(xPosition(x,y), yPosition(x,y))) 
       { 
        return true; 
       } 
       else 
       { 
        sudoku[x][y] = 0; 
       } 

      } 


     } 
     return false; 
    } 


} 




public static void main(String args[]) 
{ 
SudokuSolver solver = new SudokuSolver(); 
} 
} 
+0

그래서 모든 코드를 디버깅하도록 요청하고 있습니까? –

+0

전혀 아닙니다. Im은 당신이 시각적으로 문제를 볼 수 있는지 묻습니다. 그리고 그것이 어디에 있는지에 관해 나에게 암시를 남겨주세요. 시각적으로 볼 수없는 것보다 나는 다른 것을 계속 노력할 필요가 있습니다. –

답변

3

당신은 solvePuzzle가 호출되기 전에 인 getPuzzle -method, 내부의 퍼즐을 인쇄하고 있습니다. 퍼즐이 풀린 후에 퍼즐을 인쇄해야합니다.