Java Sudoku toString für Sudoku Feld überschreiben

NicoBec

Mitglied
Hi,
ich bin relativ am Anfang meiner Java Erfahrung und beschäftige mich momentan mit dem Aufbau eines Sudoku Feldes. Ich habe bereits das 2d Array erstellt und das Programm checkt jeweils, ob in jeder Zeile, Spalte und jedem 3x3 Feld nur einmal eine Ziffer vorkommt.
Nun möchte ich aber die toString Methode überschreiben und nach für nach jede Zeile in der Konsole ausgeben lassen.

Java:
int[] boardEins = {1,2,3,4,5,6,7,8,9};
private int[] ersteReihe = boardEins;
.
.
.
@Override
    public String toString() {
       
        return String.format("ersteReihe %s \n", ersteReihe);

    }

Soweit mein Ansatz. Die Konsole gibt aber noch nichts aus. Hat evtl. jemand einen Tipp für mich?
 

Robat

Top Contributor
Das versteh ich noch nicht so recht.
Möchtest du in der toString() Methode das gesamte Board ausgeben oder nur eine Zeile?
 

Robat

Top Contributor
So oder so können wir nur mutmaßen. Wenn er es im "sodokustyle" haben will kommt man mit Arrays.toString() nicht weit - egal ob eine Zeile oder ganzes Feld.
Mehr Informationen wären nützlich.
 

truesoul

Top Contributor
So oder so können wir nur mutmaßen. Wenn er es im "sodokustyle" haben will kommt man mit Arrays.toString() nicht weit - egal ob eine Zeile oder ganzes Feld.
Mehr Informationen wären nützlich.

Warum kommt man da nicht weit wenn man eine gesamte Zeile damit ausgeben möchte?
So stand es zumindest in der Beschreibung.
Wobei mehr Informationen wäre tatsächlich hilfreich.

Wenn man das gesamte Board ausgeben möchte kann man auch Arrays.deepToString verwenden.

Von einer Formatierten Ausgabe stand nichts.

Grüße
 
Zuletzt bearbeitet:

Robat

Top Contributor
Weil Arrays.toString() das Array nicht im "sodokustyle" ausgibt.
Ich weiß, dass da nichts von einer formatieren Ausgabe stand. Daher wären mehr Informationen angebracht ;)
 

NicoBec

Mitglied
Hallo,
erstmal danke für alle Rückmeldungen. Es tut mir leid, aber die Frage war etwas schwammig, ich versuche es nochmal genauer.
Das Sudoku Feld muss erstmal nicht funktionieren, nur Zahlen ausgeben. Dazu möchte ich die toString Methode so überschreiben, dass für jede Reihe ein String ausgegeben wird, die Zahlen mit einem Leerzeichen getrennt werden und Leerfelder nur als Leerzeile dargestellt werden.
Das Bild könnte ein mögliches Ergebnis werden, welches ich anstrebe.
 

Anhänge

  • Screenshot (1).png
    Screenshot (1).png
    3 KB · Aufrufe: 74

Robat

Top Contributor
Dann iterier' doch über jede Zeile / Spalte und gib diese - durch ein Leerzeichen separiert - aus.
Java:
for(int i = 0; i < arr.length; i++) {
    for(int j = 0; j < arr[i].length; j++) {
        ...
    }
}
 

fhoffmann

Top Contributor
int[] boardEins = {1,2,3,4,5,6,7,8,9};
private int[] ersteReihe = boardEins;
Das ist eine eigenartige Art, das Spielfeld zu speichern.
Ich würde eher ein zweidimensionales Array vorschlagen.
Ferner musst du dir überlegen, wie du Felder, die noch nicht gefüllt wurden, kennzeichnen willst (beispielsweise mit 0).
Dann kannst du in zwei for-Schleifen über dein Array gehen und die Zahlen (getrennt durch Leerzeichen) ausgeben. Ist die Zahl 0 (das Feld wurde noch nicht gefüllt), gibst du stattdessen auch ein Leerzeichen aus.
 

truesoul

Top Contributor
Hallo.

Und ich würde es nicht zwingend in toString() rein schreiben.
Besser wäre eine Methode wie z. B printBoard().

Grüße
 

NicoBec

Mitglied
Hey, nochmals vielen Dank.
Also nach Aufgabenstellung soll ich es mit toString machen, indem ich diese überschreibe.
Auch nutze ich ein 2D Array.
Ich bin mir beim Überschreiben der toString Methode nur nicht in der Syntax sicher. Dazu bräuchte ich einen Vorschlag.
 

Robat

Top Contributor
Noch mal etwas ausführlicher:

Nimm - wie vorher schon mal erwähnt - eine verschachtelte for-Schleife um deinen String zusammen zu basteln.
Java:
for(int i = 0; i < arr.length; i++) { // durchläuft die einzelnen Zeilen
     for(int j = 0; j < arr[i].length; j++) { // durchläuft die Spalten der einzelnen Zeilen
         
     }
}
Am Anfang der Methode deklarierst du dir einen String der leer ist.
In den Schleifen kannst du dir deinen String dann zusammen stellen.

Immer wenn du die Spalten durchläufst hängst du sie - zusammen mit einem Leerzeichen - an den String.
Nach einer Zeile fügst du einen Zeilenumbruch an.

Besser wäre es (wegen der Performance) einen StringBuilder zu nutzen .. solltet ihr das noch nicht gemacht haben dann tuts auch ein String.
 

Neue Themen


Oben