Sudoku prüfen

Diskutiere Sudoku prüfen im Java Basics - Anfänger-Themen Bereich.
B

Basics_Java

Java:
import java.util.Arrays;

public class SudokuPruefen {
    
    public static int[][] gitter = {
            {5,3,4,6,7,8,9,1,2},
            {6,7,2,1,9,5,3,4,8},
            {1,9,8,3,4,2,5,6,7},
            {8,5,9,7,6,1,4,2,3},
            {4,2,6,8,5,3,7,9,1},
            {7,1,3,9,2,4,8,5,6},
            {9,6,1,5,3,7,2,8,4},
            {2,8,7,4,1,9,6,3,5},
            {3,4,5,2,8,6,1,7,9}
    };
    public static String[] gitterAlsStrings = new String[13];
    public static boolean gitterIstRichtig = true;

public static void main(String[] args) throws Exception {               
        gitterIstRichtig = true;


+---+---+---+
|534|678|912| 
|672|195|348| 
|198|342|567| 
+---+---+---+ 
|859|761|423| 
|426|853|791| 
|713|924|856| 
+---+---+---+ 
|961|537|284| 
|287|419|635| 
|345|286|179| 
+---+---+---+

Ich würde gern mein Gitter also meine Zahlen genau so als aufbauen wollen, wie ich zeige mit der Darstellung.
Und möchte dazu noch überprüfen, ob der Versuch richtig ist und wenn er es ist, soll er mir true ausgeben.

Ich habe ein Blackout und weiß nicht wie ich anfangen soll.
Ich hoffe eine/r könnte mir behilflich werden.

Danke
 
mihe7

mihe7

Du musst halt zeilen- und spaltenweise feststellen, ob alle Ziffern von 1 bis 9 eingetragen sind. Edit: und natürlich auch blockweise.
 
B

Basics_Java

Du musst halt zeilen- und spaltenweise feststellen, ob alle Ziffern von 1 bis 9 eingetragen sind. Edit: und natürlich auch blockweise.
Wie fange ich denn an?
also mein Überlegung ist print +
for iterieren bis 3 mit "-" dann
print +
for iterieren bis 3 mit "-" dann
print +
for iterieren bis 3 mit "-" dann
print +
wie mach ich jetzt das Symbol "|" und dahinter die Zahlen .... und wie überprüfe ich die ?
 
H

httpdigest

Häh? Ist jetzt deine Aufgabe, zu prüfen, ob ein gegebenes Sudoku gemäß der Sudoku-Regeln valide ist, oder sollst du einfach nur ein Sudoku als String ausgeben?
 
MoxxiManagarm

MoxxiManagarm

ne sowas wie

Java:
public boolean check(int[] unit) { /* ... */ };

Wobei unit ein Quadratblock, eine Zeile oder Spalte sein kann. Spalte und Quadratblock musst du natürlich erst zu einem solchen Array umwandeln, Zeile kannst du direkt übergeben.Es könnten auch Indexpaare sein.
 
mihe7

mihe7

Also, die Frage ist doch: ist das Soduko gültig? Darauf gibt es nur zwei Antworten: ja oder nein. Für letzteres existiert der Datentyp boolean.
Java:
static boolean istSudokuGueltig(int[][] soduku) {
    boolean ergebnis;
    // ergebnis = ...
    return ergebnis;
}
Damit hätten wir schon mal das Skelett. Jetzt ist die Frage: wann ist ein Soduko gültig? Antwort: wenn in jeder Zeile, in jeder Spalte und in jedem Block alle Ziffern von 1 bis 9 genau einmal vorkommen. Jede Zeile, jede Spalte und jeder Block enthält genau 9 Ziffern. Du willst also eine Methode verwenden, die prüft, ob von 9 gegebenen Zahlen jede Ziffer von 1 bis 9 enthalten ist.

Das ist dann die von @MoxxiManagarm angesprochene check-Methode.

Java:
static boolean istSudokuGueltig(int[][] soduku) {
    boolean ergebnis = true;
    for (int zeile = 0; zeile < sodoku.length; zeile++) {
        ergebnis = ergebnis && check(sodoku[0]); 
    }   
    // ...
    return ergebnis;
}
 
B

Basics_Java

Also, die Frage ist doch: ist das Soduko gültig? Darauf gibt es nur zwei Antworten: ja oder nein. Für letzteres existiert der Datentyp boolean.
Java:
static boolean istSudokuGueltig(int[][] soduku) {
    boolean ergebnis;
    // ergebnis = ...
    return ergebnis;
}
Damit hätten wir schon mal das Skelett. Jetzt ist die Frage: wann ist ein Soduko gültig? Antwort: wenn in jeder Zeile, in jeder Spalte und in jedem Block alle Ziffern von 1 bis 9 genau einmal vorkommen. Jede Zeile, jede Spalte und jeder Block enthält genau 9 Ziffern. Du willst also eine Methode verwenden, die prüft, ob von 9 gegebenen Zahlen jede Ziffer von 1 bis 9 enthalten ist.

Das ist dann die von @MoxxiManagarm angesprochene check-Methode.

Java:
static boolean istSudokuGueltig(int[][] soduku) {
    boolean ergebnis = true;
    for (int zeile = 0; zeile < sodoku.length; zeile++) {
        ergebnis = ergebnis && check(sodoku[0]);
    }  
    // ...
    return ergebnis;
}
Mit Sudoku ist hier dann mein Gitter gemeint oder ?
 
B

Basics_Java

Java:
import java.util.Arrays;

public class SudokuPruefen {
    
    public static int[][] gitter = {
            {5,3,4,6,7,8,9,1,2},
            {6,7,2,1,9,5,3,4,8},
            {1,9,8,3,4,2,5,6,7},
            {8,5,9,7,6,1,4,2,3},
            {4,2,6,8,5,3,7,9,1},
            {7,1,3,9,2,4,8,5,6},
            {9,6,1,5,3,7,2,8,4},
            {2,8,7,4,1,9,6,3,5},
            {3,4,5,2,8,6,1,7,9}
    };
    public static String[] gitterAlsStrings = new String[13];
    public static boolean gitterIstRichtig = true;
    DESIRED_SUM = 1+2+3+4+5+6+7+8+9;
    public boolean check(int[] unit) {
        //for()
    };
    

    public static void main(String[] args) throws Exception {       
        
        gitterIstRichtig = true;
        
    /*    System.out.println(Arrays.toString(gitter));
        boolean istSudokuGueltig(int[][] gitter) {
            boolean ergebnis = true;
            for (int zeile = 0; zeile < gitter.length; zeile++) {
                ergebnis = ergebnis && check(gitter[0]);
            }   
                // ...
            return ergebnis;
            }
        */
        boolean check_sudoku(int[][] gitter) {
            if (check_rows(gitter) == gitterIstRichtig){
                System.out.println("Zeile ist richtig");
            }
                if (check_columns(gitter) == gitterIstRichtig){
                    System.out.println("Spalte ist richtig");
                }
                    if(check_squares(gitter) == gitterIstRichtig) {
                        return gitterIstRichtig;
                    }
        System.out.println(check_sudoku(gitter));
                    
            }
    
        
        private boolean check_squares(int[][] gitter) {
            // TODO Auto-generated method stub
            return false;
        }
        private boolean check_columns(int[][] gitter) {
            // TODO Auto-generated method stub
            return false;
        }
        private boolean check_rows(int[][] gitter) {
            // TODO Auto-generated method stub
            return false;
        }
        
    }

Ich weiß noch habe ich die Funktionen check_squares, check_columns und check_rows nicht ausgefüllt, aber wie fahre ich hier fort ... ich konnte mit euren Funktionen nicht klar kommen. Ich weiß gerade nicht wie ich auf das Array prüfe..
 
B

Basics_Java

Mit Sudoku ist hier dann mein Gitter gemeint oder ?
Java:
public static void main(String[] args) throws Exception {       
        //gitterIstRichtig = true;
        boolean gefunden = false;
        System.out.print("+");
        for(int a=0;a<3;a++) {
            System.out.print("-");
        }
        System.out.print("+");
        for(int b=0;b<3;b++) {
            System.out.print("-");
        }
        System.out.print("+");
        for(int c=0;c<3;c++) {
            System.out.print("-");
        }
        System.out.println("+");
        System.out.print("|");
        for(int d=0;d<gitter.length;d++) {
            if(gitter[d] == 5) {
                gefunden = true;
                break;
            }   
        }
        if(gefunden) {
            System.out.print("d");
        }
        for(int e=0;e<gitter.length;e++) {
            if(gitter[e] == 3) {
                gefunden = true;
                break;
            }
                    
            }
        
            if(gefunden) {
                System.out.print("e");
            }
        }

hab jetzt irgendwie so angefangen, konnte mit euren Funktionen nichts anfangen, ich weiß nicht wie ich vorgehen soll, das ist mein Problem. Ich weiß auch nicht, wie ich die Zahlen überprüfen soll.
 
Thema: 

Sudoku prüfen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben