J'ai donc ce que je pense être un bon code pour un solveur de sudoku en java mais j'ai besoin d'aide avec cette méthode. Il me donne un débordement de pile quand je l'incorpore dans une méthode principale. Le problème est que ma méthode ne sait pas comment faire demi-tour et réparer ses erreurs. J'ai besoin d'un drapeau booléen (celui qui, contrairement à celui utilisé dans le code ci-dessous, fonctionne de préférence) ou quelque chose pour le faire savoir quand il devrait revenir et quand il peut encore aller de l'avant et continuer à résoudre le jeu. Merci pour toute aide que vous pouvez donnerComment réparer cette erreur de débordement de pile?
public void play(int r, int c){//this method throws the StackOverflowError
if(needAtLoc(r,c).size()==9){
int num=1+generator.nextInt(9);
setCell(r,c,num,this);
if(c<8){
System.out.println(this);///////////////
play(r, c+1);
}
else{
play(r+1, 0);
}
}
else{
if(needAtLoc(r,c).size()==0){//no possible moves THIS IS THE PROBLEM LINE!!!
if(c>0){
play(r, c-1);//play last cell, in column to left
}
else{
if(r==0){
play(r,c);//first square, so must play again (can't go back)
}
else{
play(r-1, 8);/*first cell of row so must go to previous row and
the end column*/
}
}
}
else{//if there are possible moves
int num=needAtLoc(r,c).remove(generator.nextInt(needAtLoc(r,c).size()));
setCell(r,c,num,this);//set the value of the cell
System.out.println(this);//////////////
if(r==8 && c==8){//the end of the cell has been reached so must end recursive call
return;
}
else{
if(c<8){
play(r, c+1);//normal, next cell
}
else{
play(r+1, 0);/*last cell in row so we go to next one
in the first column ("return" button)*/
}
}
}
}
}
vous devriez dire aux gens que c'est Java. C'est beaucoup de code, au fait, pensez à le décomposer en fonctions. Es-tu sûr de résoudre un sudoku sur la pile? – Kobi
Sudoku code avec une date limite. Devoirs? –
A moins que T-9hrs soit le nom d'un modèle Terminator;) – jbcreix