# Funktionen richtig verbinden.



## faz (7. Mai 2018)

Hallo,
könnte mir jemand helfen bei meinem Code. Ich würde gerne die Sudoku Methode beenden sobald alle Kästchen voll sind. Dafür wollte ich eine zweite Funktion schreiben die alle Kästchen nach jeder Eingabe Prüft und mit boolean arbeitet. Der boolean Funktion muss zusätzlich immer das aktuelle Spielbrett übergeben werden. 

Meine Frage ist wie übergebe ich das Aktuelle Spielbrett? und ist meine if u. while bedingung vor der Funktion so ok?

Ich weis das ich auf Funktionen zugreife die Ihr nicht kennen könnte allerdings sind meine Frage ja ziemlich allgemein und haben nichts damit zutun.


```
public class Sudoku {

  public static void main (String[] args) {

    int reihen = 9;
    int spalten = 9;
    int row;
    int column;
    int[][] spielbrett = new int[9][9];

    for(int i = 0; i < 9; i++){
      for(int j = 0; j < 9; j++)
      {
        spielbrett[i][j] = 0;
      }
    }

    Grid.create(reihen, spalten);

      for (row = 0; row <= 2; row++) {
        for (column = 0; column <= 2; column++)
          Grid.paintFloor(row, column, Grid.CYAN);
      }
      for (row = 0; row <= 2; row++) {
        for (column = 6; column <= 8 ; column++)
          Grid.paintFloor(row, column, Grid.CYAN);
      }
      for (row = 3; row <= 5; row++) {
        for (column = 3; column <= 5; column++)
          Grid.paintFloor(row, column, Grid.CYAN);
      }
      for (row = 6; row <= 8; row++) {
        for (column = 0; column <= 2; column++)
          Grid.paintFloor(row, column, Grid.CYAN);
      }
      for (row = 6; row <= 8; row++) {
        for (column = 6 ; column <= 8; column++)
          Grid.paintFloor(row, column, Grid.CYAN);
      }

      if (fertig() == true)
        System.exit (0);
      while(fertig() == false){

        System.out.print ("Bitte machen Sie einen Spielzug!");
        Grid.waitForClick ();
        int rowIndex = Grid.getClickedRow();
        int columnIndex = Grid.getClickedColumn();
        int digit = Grid.readDigit();
        Character.forDigit(digit, 10);
        Grid.placeItem(rowIndex, columnIndex, Character.forDigit(digit, 10), Grid.BLACK);

        if (digit == 0){
            Grid.removeItem(rowIndex, columnIndex);
          }
          else{
            spielbrett[rowIndex][columnIndex] = digit;
          }
         }
        }
       public static boolean fertig(){

//Aktuelle Spielbrett muss übergeben werden

        for (int i = 0; i < 9; i++) {
          for (int j = 0; j < 9; j++) {
            if (spielbrett[i][j] != 0) {
              return true;
            }
          }
        }
        return false;
      }
    }
```


----------



## Robat (7. Mai 2018)

Dein Spielbrett ist ein `int[][]` also muss der Parameter der Methode `fertig()` auch ein `int[][]` sein 
Einen boolean musst du nicht auf true/false prüfen .. er ist ja an sich schon ein boolean. So kannst du bspw die Bedingung der if-Abfrage also auch vereinfachen: `if(fertig()) {..}`


----------



## faz (8. Mai 2018)

Danke, ich habe es geändert, jetzt kommt auch keine Fehlermeldung mehr. Allerdings beendet er es bei einem vollen Feld nicht das Spiel, was mach ich den noch Falsch..?

Tausche ich das false mit true beendet er es direkt.


```
if (false)
        System.exit (0);
      while(true){

        System.out.print ("Bitte machen Sie einen Spielzug!");
        Grid.waitForClick ();
        int rowIndex = Grid.getClickedRow();
        int columnIndex = Grid.getClickedColumn();
        int digit = Grid.readDigit();
        Character.forDigit(digit, 10);
        Grid.placeItem(rowIndex, columnIndex, Character.forDigit(digit, 10), Grid.BLACK);

        if (digit == 0){
            Grid.removeItem(rowIndex, columnIndex);
                     fertig(spielbrett);
          }
          else{
            spielbrett[rowIndex][columnIndex] = digit;
                     fertig(spielbrett);
          }
         }
        }

       public static boolean fertig(int[][] brett){

        for (int i = 0; i < 9; i++) {
          for (int j = 0; j < 9; j++) {
            if (brett[i][j] != 0) {
              return true;
            }
          }
        }
        return false;
      }
```


----------



## Robat (8. Mai 2018)

Du nutzt den Wahrheitswert deiner fertig() Methode ja gar nicht. Diese Methode gibt dir einen boolean der sagt ob die Schleife erneut durchlaufen soll oder nicht. Also du musst diesen Wert als Bedingung nehmen.  Momentan ist Die Bedingung deiner Schleife immer true...


----------

