# Java Sudoku toString für Sudoku Feld überschreiben



## NicoBec (17. Dez 2017)

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. 


```
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 (17. Dez 2017)

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


----------



## truesoul (17. Dez 2017)

Hallo. 

Wenn du ein Array ausgeben möchtest kannst du Arrays.toString(einarray) verwenden.

Grüße


----------



## truesoul (17. Dez 2017)

Robat hat gesagt.:


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



Anscheinend ist sein Code nur ein Beispiel und die Variablenamen sind bescheiden benannt. Es soll wohl zeigen das es sich um eine Zeile vom gesamten Board handelt.


----------



## Robat (17. Dez 2017)

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 (17. Dez 2017)

Robat hat gesagt.:


> 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


----------



## Robat (17. Dez 2017)

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 (17. Dez 2017)

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.


----------



## Robat (17. Dez 2017)

Dann iterier' doch über jede Zeile / Spalte und gib diese - durch ein Leerzeichen separiert - aus.

```
for(int i = 0; i < arr.length; i++) {
    for(int j = 0; j < arr[i].length; j++) {
        ...
    }
}
```


----------



## fhoffmann (17. Dez 2017)

NicoBec hat gesagt.:


> *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 (18. Dez 2017)

Hallo.

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

Grüße


----------



## NicoBec (18. Dez 2017)

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.


----------



## truesoul (18. Dez 2017)

NicoBec hat gesagt.:


> Ich bin mir beim Überschreiben der toString Methode nur nicht in der Syntax sicher. Dazu bräuchte ich einen Vorschlag.



Hast du doch schon erhalten. Siehe letzten Post von @Robat


----------



## Robat (18. Dez 2017)

Noch mal etwas ausführlicher:

Nimm - wie vorher schon mal erwähnt - eine verschachtelte for-Schleife um deinen String zusammen zu basteln.

```
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.


----------



## NicoBec (18. Dez 2017)

Hi, danke euch allen auf jeden Fall. Ich denke, damit komme ich erstmal weiter. (Y)


----------

