Hallo, ich habe folgendes Problem.
Ich habe in meinem Programm 3 Metoden mit jeweils geschachtelten for-Schleifen und eine Methode, die die Werte der Variablen kontrolliert, die in den Methoden verändert wurden. Das Problem ist, dass die Werte aber immer den Wert aus der Initialisierung haben, wenn ich sie in der letzten Methode aufrufe.
So haben die variablen isZeile, isSpalte und isKaestchen immer den Wert true, obwohl sie in anderen Methoden den Wert false erhalten haben... . Die letzte Methode liefert immer "Das Sudoku wurde erfolgreich gelöst". Wie kann man es schaffen, dass die Variablen ihren Wert auch in dieser MEthode behalten?
Hier der komplette Code:
lg
Ich habe in meinem Programm 3 Metoden mit jeweils geschachtelten for-Schleifen und eine Methode, die die Werte der Variablen kontrolliert, die in den Methoden verändert wurden. Das Problem ist, dass die Werte aber immer den Wert aus der Initialisierung haben, wenn ich sie in der letzten Methode aufrufe.
So haben die variablen isZeile, isSpalte und isKaestchen immer den Wert true, obwohl sie in anderen Methoden den Wert false erhalten haben... . Die letzte Methode liefert immer "Das Sudoku wurde erfolgreich gelöst". Wie kann man es schaffen, dass die Variablen ihren Wert auch in dieser MEthode behalten?
Hier der komplette Code:
Java:
/**
* Lösungsmechanismen, um ein Sudoku zu prüfen.
*
* @version 1.0; 04.03.2012
*/
public class Kontrollstrukturen
{
public static void main (String[] args)
{
int koordinate[][] = {
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9} };
int kaestchen[][] = new int[9][9];
int spalte = 0;
int zeile = 0;
int element = 0;
int count = 0;
int count2 = 0;
int i = 0;
int spaltenanfang = 0;
int spaltenende = 2;
int zeilenanfang = 0;
int zeilenende = 2;
boolean isZeile = true ; // 1 gilt als Definition von wahr
boolean isSpalte = true ;
boolean isKaestchen = true ;
//leseEingaben(zeile,spalte, element,koordinate);
//pruefe_doppeltesVorkommen_in_Zeile(zeile,spalte, element,koordinate,isZeile);
pruefe_doppeltesVorkommen_in_Spalte( zeile, spalte, element, koordinate, isSpalte);
// pruefe_doppeltesVorkommen_in_dreimaldrei_Kaestchen(zeile, spalte, koordinate, kaestchen, count, count2, i, spaltenende,spaltenanfang,zeilenende, zeilenanfang, element, isKaestchen);
pruefe_Ergebnisse(isZeile, isSpalte,isKaestchen);
}
public static void leseEingaben(int zeile, int spalte, int element, int koordinate[][])
{
for(zeile = 0; zeile <= 8; zeile++)
{
for (spalte = 0; spalte <= 8; spalte++)
{
System.out.print(koordinate[zeile][spalte] + " ");
}
System.out.println("");
spalte = 0;
}
}
// hier könnte noch eine Bedingeung rein, damit nur Zahlen von 1 bis 9 eine richtige Eingabe sind
public static void pruefe_doppeltesVorkommen_in_Zeile(int zeile, int spalte, int element, int koordinate[][], boolean isZeile)
{
zeile = 0;
element = 0;
for(zeile = 0; zeile <= 8; zeile++)
{
for (element = 0; element <= 8; element++)
{
for(spalte = 0; spalte <= 8; spalte++)
{
if(koordinate[zeile][element] == koordinate[zeile][spalte] && spalte != element)
{
isZeile = false;
break;
}
if(koordinate[zeile][element] != koordinate[zeile][spalte])
{
System.out.println("Zahl in Zeile " + (zeile + 1) + " und Spalte " + (spalte + 1) + " ist ungleich der Zahl in Spalte " + (element + 1));
}
}
}
}
}
public static void pruefe_doppeltesVorkommen_in_Spalte(int zeile, int spalte, int element, int koordinate[][], boolean isSpalte)
{
zeile = 0;
spalte = 0;
element = 0;
for(spalte = 0; spalte <= 8; spalte++)
{
for(element = 0; element <= 8; element++)
{
for(zeile = 0; zeile <= 8; zeile++)
{
if(koordinate[zeile][spalte] == koordinate[element][spalte] && zeile != element )
{
isSpalte = false;
//System.out.println(isSpalte);
// break;
//System.out.println(koordinate[zeile][spalte] + " ist gleich " + koordinate[element][spalte]);
break;
}
if(koordinate[zeile][spalte] != koordinate[element][spalte])
{
System.out.println("Die Zahl in Spalte " + (spalte+1) + "und Zeile" + (zeile+1) + "ist UNGLEICH der Zahl in Zeile" + (element+1));
}
}
}
}
}
public static void pruefe_doppeltesVorkommen_in_dreimaldrei_Kaestchen(int zeile, int spalte, int koordinate[][], int kaestchen[][], int count, int count2, int i, int spaltenanfang,int spaltenende, int zeilenanfang, int zeilenende, int element,boolean isKaestchen)
{
zeile = 0;
spalte = 0;
count = 0;
count2 = 0;
i = 0;
spaltenanfang = 0;
spaltenende = 2;
zeilenanfang = 0;
zeilenende = 2;
// Hier muss so schnell wie möglich ein vernünftiger Algorithmus hinne!!!
for(count = 0; count <= 8; count++)
{
for(zeile = 0; zeile <= 2; zeile++)
{
for(spalte = spaltenanfang; spalte <= spaltenende; spalte++)
{
kaestchen[count2][i] = koordinate[zeile][spalte];
System.out.print(kaestchen[count][i]);
i++;
}
}
count2++;
i = 0;
if(spaltenende <= 8)
{spaltenanfang += 3;
spaltenende += 3;
if(spaltenende > 8)
{
zeilenanfang += 3;
spaltenanfang = 0;
spaltenende = 2;
}
}
}
for(count = 0; count <= 8; count++)
{
for(element = 0; element <= 8; element++)
{
for(count2 = 0; count2 <= 8; count2++)
{
if(kaestchen[count][element] == kaestchen[count][count2] && element != count2)
{
isKaestchen = false;
break;
}
}
}
}
}
public static void pruefe_Ergebnisse(boolean isZeile, boolean isSpalte, boolean isKaestchen)
{
if(isZeile == false || isSpalte == false|| isKaestchen == false)
{
System.out.println("Das Sudoku enthält einen Fehler");
}
//System.out.println(isSpalte);
else
{
System.out.println("Das Sudoku wurde erfolgreich gelöst");
}
}
}
lg