자바에서 재귀와 함께 스도쿠 해결사를 만들고 있습니다.재귀에 의한 스도쿠 (Sudoku) 재귀에 의한 바운드 에러 - Java
public boolean fsolve(int i, int j){
if (j >= this.SIZE){
i++;
if (i>=this.SIZE){
return true;
}
}
if (!this.isEmpty(i,j)){
return fsolve(i,j+1);
}
for (int curval = 1; curval < 10; curval++){
if ((this.tryValue(curval, i, j)) && (this.fsolve(i, j+1))){
return true;
}
}
this.clear(i, j);
return false;
}
이것은 내 해결 기능입니다.
tryValue 함수는 위치 i, j에서 구부리기를 시도합니다.
클리어 기능 제가, J가 될 위치의 값을 설정 0
전체 스도쿠 int로 불리는 모델 [] []로로드 및 I는 행, 열 및 상자를 체크하는 기능을 만들었다 . 그들은 모두 의도 한대로 작동합니다.
내 해결 함수가 나를 쓰러 뜨리고 범위를 벗어났습니다. 오류가 발생했습니다. 내 기능이 제대로 작동 할 것이라고 믿기 때문에 지금 갈 방법이 확실하지 않습니다.
이것은 말씀입니다 :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at Field.isEmpty(Field.java:99)
at Field.fsolve(Field.java:161)
at Field.fsolve(Field.java:165)
at Field.fsolve(Field.java:165)
at Field.fsolve(Field.java:162)
at Field.fsolve(Field.java:165)
at Field.fsolve(Field.java:165)
at Field.fsolve(Field.java:162)
at Field.fsolve(Field.java:162)
at Field.fsolve(Field.java:165)
at Field.fsolve(Field.java:165)
at Sudoku.main(Sudoku.java:6)
기능이 라인에서 시작 해결 내 152
나의 IsEmpty 함수의 기능은 다음과 같습니다
여기public boolean isEmpty(int i, int j) {
if (this.model[i][j] == 0){
return true;
}
return false;
}
내 tryValue 기능입니다 :
public boolean tryValue(int val, int i, int j) {
if (!checkRow(val, i)) {
return false;
}
if (!checkCol(val, j)) {
return false;
}
if (!checkBox(val, i, j)) {
return false;
}
this.model[i][j] = val;
return true;
}
이제는 모델 [] []을 전혀 변경하지 않은 것처럼 보입니다. 이 클래스를 초기화 할 때 모델 [] []에 0을 넣고 유효한 Sudoku 값을 가진 파일을 가져 오는 것으로 시작합니다. 이 부분은 지금까지 작동합니다. 지금 실행하면 fsolve 함수가 아무 것도하지 않는 것처럼 보입니다.
파일 을 가져온 후이 모양이 그대로 유지되지만 fsolve 기능을 수행 한 후에도 동일합니다.
스택 추적으로 예외를 게시하십시오. –