2013-03-20 2 views
0

sudoku 솔버에서 작업 중입니다. 해결 방법을 사용하면 일시적으로 "해결 된"try 및 catch 예외가 발생합니다.try/catch 예외 제거

그러나 나는 담요가 ArrayIndexOutOfBoundsException 인 것을 조금 걱정한다고 생각합니다. 간단히 try/catch 예외에서 숨기는 대신 오류를 수정하기 만하면됩니다.

이 같은 시도는/캐치 모습입니다 : 내가 생각하고

try { 
     if (puzzle.getNum(i, j) != puzzle.blank) 
      return solve(nexti, nextj); 
    } catch (ArrayIndexOutOfBoundsException e) { 
     return true; 
    } 

y++로 연결 행을 변경하는 시간이있을 때 x > 8 나는 이미 정보를 가지고 있기 때문이다. 그리고 y > 8 일 때 모든 81 (9x9) 셀이 채워지기 때문에 프로그램을 완료해야합니다.

나는 간단한

if((i > 8) && (j > 8)){ 
     return true; 
} 

의 시도/캐치 방법을 변경하는 선 주위에 생각하고 있지만, 그뿐만 아니라 나에게 오류의 무리를 준다.

수정 사항은 매우 간단하지만 개념적으로 중요하다고 확신합니다.

+0

예외 범위를 벗어나는 예외 (배열 액세스가 진행되는 것을 볼 수 없음)는 무엇입니까? – Daedalus

+0

은 행 수입니다. – ITroubs

+0

당신이 제안한'if' 조건을 변경하여 작동하게 할 수 있습니까? 대신 &&? – jmrodrigg

답변

0

재귀 적 방법을 사용하고 있으므로 첫 번째 코드 줄에 "종료 조건"이 있어야합니다.

트릭을해야 당신의 방법의 시작 부분에서

if((i > 8) && (j > 8)){ 
     return true; 
} 

추가 (당신이 보내지 않을 것이 확실한 경우 I = 9시 J < 8). 이 때 다른 오류가 있습니까?

나는 방법의 시작 부분에이 검사를 추가 할 수
1

: 당신은 어느 방향에서 퍼즐 보드의 범위 외에있는 경우

if(i >= puzzle.puzzleSize || j >= puzzle.puzzleSize) 
{ 
    return false; 
} 

, 당신은 명확하게 돌아 따라서, 해결책을 발견하지 않았습니다 그릇된. nexti 및 nextj 계산은 다음 재귀 호출이 범위를 벗어날 때 대/소문자를 처리하므로이 확인 후에 수행 할 수 있습니다.

당신은 "글쎄, 내 nextj 계산은 모듈러스를 사용하므로 절대 범위를 벗어나지 않을 것"이라고 말할 수 있습니다. 사실입니다. 그러나 올바른 매개 변수로 메소드가 호출 될 것이라고 보장 할 수는 없으므로 점검 할 가치가 있습니다.