Hi
ich habe folgendes Problem:
Ich bin dabei einen Sudoku-Solver umzusetzen. Ich habe die Zahlen in einem 2 dimensionalen Array abgespeichert (0 = leeres feld). Jetz überpüfe ich jedes feld(,dass die Zahl 0 gespeichert hat) des arrays auf die Übereinstimmung mit den "spielregeln" ab. Wenn eine Zahl in einem Feld eine "Regel" nicht erfüllt, wird die Zahl um 1 erhöht und die Methode ruft sich nocheinmal auf und probiert das solange bis sie bei 9 ist... Das geht alles super bis zur Abbruch bedingung. Wenn keine der zahlen 1 bis 9 passt springt das Programm zum letzten Feld das 0 war zurück und erhöht dort den Wert weiter bis zur nächsten passenden Zahl(geht denk ich auch noch aber soweit bin ich noch nicht gekommen). Andernfalls soll er einfach weiter machen. Hier liegt das Problem.
Hier ist mein code um das nochmal ein bisschen deutlicher zu machen. Programmiere noch nicht soo lange und ist deshalb wahrscheinlich ziemlich hässlich programmiert...
So mein Problem is jetz dass er nach diesem return nicht wieder zur checken() methode zurückkehrt und dort weitermacht sondern wieder die methode aufruft. Im Debugger springt er dann einfach wieder nach oben und a ist aufeinmal 5!!! Das endet dann alles in einem StackOverflow. Was mach ich falsch?
Wär nett wenn mir jemand helfen könnte :toll:
mfg Weeeeeeenzeal
ich habe folgendes Problem:
Ich bin dabei einen Sudoku-Solver umzusetzen. Ich habe die Zahlen in einem 2 dimensionalen Array abgespeichert (0 = leeres feld). Jetz überpüfe ich jedes feld(,dass die Zahl 0 gespeichert hat) des arrays auf die Übereinstimmung mit den "spielregeln" ab. Wenn eine Zahl in einem Feld eine "Regel" nicht erfüllt, wird die Zahl um 1 erhöht und die Methode ruft sich nocheinmal auf und probiert das solange bis sie bei 9 ist... Das geht alles super bis zur Abbruch bedingung. Wenn keine der zahlen 1 bis 9 passt springt das Programm zum letzten Feld das 0 war zurück und erhöht dort den Wert weiter bis zur nächsten passenden Zahl(geht denk ich auch noch aber soweit bin ich noch nicht gekommen). Andernfalls soll er einfach weiter machen. Hier liegt das Problem.
Hier ist mein code um das nochmal ein bisschen deutlicher zu machen. Programmiere noch nicht soo lange und ist deshalb wahrscheinlich ziemlich hässlich programmiert...
Java:
public void checken(){//ruft die lösungsmethode auf.
//Hierhin soll zurückgekehrt werden, wenn eine passende Zahl gefunden wurde
for(this.x=0;x < 9;x++){
for(this.y=0;y < 9;y++){
if(this.array[x][y] == 0){
this.solve(1);
xdavor = x;
ydavor =y;
}
}
}
}
public void solve(int i){//Überprüfungsmethode
for(int a=0;a < 9;a++){
if(i == this.array[x][a]){
solve(i+1);
}else if(i == this.array[a][y]){
solve(i+1);
}
}
for(int b=0;b < 3;b++){
for(int c=0;c < 3;c++){
if(b == x && c == y){
}else{
if(x < 3 && y < 3){
if(i == this.array[b][c]){
solve(i+1);
}
}
}
if(b == x && c+3 == y){
}else{
if(x < 3 && y < 6 && y > 2){
if(i == this.array[b][c+3]){
solve(i+1);
}
}}
if(b == x && c+6 == y){
}else{
if(x < 3 && y < 9 && y > 5){
if(i == this.array[b][c+6]){
solve(i+1);
}
}
}
if(b+3 == x && c == y){
}else{
if(x < 6 && x > 2 && y < 3){
if(i == this.array[b+3][c]){
solve(i+1);
}
}}
if(b+3 == x && c+3 == y){
}else{
if(x < 6 && x > 2 && y < 6 && y > 2){
if(i == this.array[b+3][c+3]){
solve(i+1);
}
}}
if(b+3 == x && c+6 == y){
}else{
if(x < 6 && x > 2 && y < 9 && y > 5){
if(i == this.array[b+3][c+6]){
solve(i+1);
}
}
}
if(b+6 == x && c == y){
}else{
if(x < 9 && x > 5 && y < 3){
if(i == this.array[b+6][c]){
solve(i+1);
}
}}
if(b+6 == x && c+3 == y){
}else{
if(x < 9 && x > 5 && y < 6 && y > 2){
if(i == this.array[b+6][c+3]){
solve(i+1);
}
}}
if(b+6 == x && c+6 == y){
}else{
if(x < 9 && x > 5 && y < 9 && y > 5){
if(i == this.array[b+6][c+6]){
solve(i+1);
}
}
}
}
}
if(i > 9){
x = xdavor;
y = ydavor;
solve(idavor+1);
}else{
this.array[x][y]=i;
idavor = i;
return;// <--- PROBLEM!!!!
}
}
So mein Problem is jetz dass er nach diesem return nicht wieder zur checken() methode zurückkehrt und dort weitermacht sondern wieder die methode aufruft. Im Debugger springt er dann einfach wieder nach oben und a ist aufeinmal 5!!! Das endet dann alles in einem StackOverflow. Was mach ich falsch?
Wär nett wenn mir jemand helfen könnte :toll:
mfg Weeeeeeenzeal