Klassen Sudoku-Spiel Werte werden nicht gesetzt

crownicon

Mitglied
Hallo alle zusammen,

Ich soll ein Sudoku-Spiel Programmieren. Es liest aus einem Beispiel.txt die Zahlen ein und soll dann den Spieler spielen lassen. Ich lass euch einfach den Code mal hier vielleicht sieht ja jemand meinen Fehler 🙂
Java:
import java.util.*;
import java.io.*;
public class TestSudoku {
  public static void main(String[] args) throws IOException {
    Sudoku test = new Sudoku("beispiel.txt");                         
   
    Scanner in=new Scanner(System.in);
    boolean solved=false;  
   
    do{
      test.print();
      System.out.println("Zeile:");
      int tempzeile=in.nextInt();
      byte zeile=(byte)tempzeile;
     
     
      System.out.println("Spalte:");
      int tempspalte=in.nextInt();
      byte spalte=(byte)tempspalte;
     
      System.out.println("Wert:");
      int tempwert=in.nextInt();
      byte wert= (byte)tempwert;
     
      char pruef=test.setze(zeile,spalte,wert);
     
      switch (pruef) {
        case 'p'  :  System.out.println("Bitte Nur Zeilen oder Spalten zwischen 1 und 9!");
       
        break;
        case 'w' :  System.out.println("Bitte nur Werte zwischen 1 und 9!");
        break;
        case 'z': System.out.println("Die Zeile enthält schon den eingegebenen wert!");
        break;
        case 's': System.out.println("Die Spalte enthält den eingegebenen Wert schon!");
        break;
        case 'f': System.out.println("Juhuu Gelöst!");solved=true;
        break;
        case 'l':
        break;
        default:
       
      } // end of switch
      System.out.println("Wollen sie ihre eingabe widerrufen?j für ja n für nein");
      char widerruf=in.next().charAt(0);
      if (widerruf=='j'){
        test.widerrufen();
      }//end of if
     
    }while(!solved);
   
   
        }//main
    }//class
TestSudoku.java
Java:
import java.util.*;
import java.io.*;
public class Sudoku {
  private byte[][] spielfeld;
    private byte temp;
    private byte momentaneZeile;
    private byte momentaneSpalte;
    private byte momentanerWert;
  // weitere Attribute !
  public Sudoku(String file) throws IOException {
    // Initialisierung des Spielfeldes
    spielfeld = new byte[9][9];
    // Laden der Werte aus der Datei file und ...
    BufferedReader in = new BufferedReader(new FileReader(file));
   
    String temp;
    for(int i=0; i<9; i++) {
      temp = in.readLine();
      // ... speichern dieser Werte in das Spielfeld
      for(int j=0; j<9; j++) {
        if(temp.charAt(j) == '*') spielfeld[i][j] = 0;
        else {
          spielfeld[i][j] = (byte)(temp.charAt(j) - '0');
        }
      }
    }
   
  }
  public void print(){
    for (int i=0;i<9;i++) {
      System.out.println();
      if (i%3==0) {
        System.out.println("\n --- --- ---");
      }
      for (int j=0;j<9 ;j++ ) { 
       
       
        if (j%3==0){
          System.out.print("|");         
        } // end of if
        if (j!=0&&j%8==0){
          System.out.print("|");
        }
        if (spielfeld[i][j]==0){
          System.out.print("*");
        }
        else {System.out.print(spielfeld [i][j]);}
       
       
      } // end of for
     
    } // end of for
    System.out.println("\n --- --- ---");
  }
    public void widerrufen(){
    spielfeld[momentaneZeile][momentaneSpalte]=temp;
   
    }
  public char setze(byte zeile, byte spalte, byte wert) {
    if (spalte>9||spalte<1) {
      return 'p';
    } // end of if
    if (zeile>9||zeile<1) {
      return 'p';
    } // end of if
    if (wert>9||wert<1) {
      return 'w';
    } // end of if
    if (zeileok(spielfeld,zeile,wert)) {
      return 'z';
    } // end of if
    if (spalteok(spielfeld,spalte,wert)){
      return 's';
    }
    if (quadrantok(spielfeld,zeile,spalte,wert)){
      return 'q';
    }
    temp=spielfeld[zeile][spalte];
    momentaneZeile=zeile;
    momentaneSpalte=spalte;
    momentanerWert=wert;
    spielfeld[momentaneZeile][momentaneSpalte]=momentanerWert;
    for (int i=0;i<9;i++){
      for (int j=0;j<9;j++){
        if(spielfeld [i][j]==0){
          return 'l';
        }
        else{ return 'f';} 
      }
    }
    return 'f';
  }
 
 
 
  public boolean zeileok (byte [][]spiel,byte zeile,byte wert){
    for (int i=0;i<spielfeld[zeile].length ;i++ ) {
      if (spiel[zeile][i]==wert) {
        return true;
      } // end of if
    } // end of for
    return false;
  }
  public boolean spalteok(byte [][]spiel,byte spalte,byte wert){                         //Überprüfung der Spalte
      for(int i=0;i<spielfeld.length;i++){
      if (spielfeld[i][spalte]==wert){
        return true;
      }
     
      }
      return false;
  }
 
    public boolean quadrantok(byte [][]spiel,byte zeile,byte spalte,byte wert){         //Überprüfung des quadranten
    int blockZeile=(int)(zeile/3*3);
    int blockSpalte=(int)(spalte/3*3);
    for (int i=blockZeile;i<blockSpalte+3;i++){
      for (int j=blockSpalte;j<blockZeile+3;j++){
       
        if (spiel[i][j]==wert){
          return true;
         
        }
      }
     
    }
    return false;
    }
 
}
Sudoku.java

Wäre für jede Hilfe dankbar 🙂
 
Oh sorry,
Er setzt die Werte die ich ihm auf die methode setze in der Klasse Sudoku mitgebe nicht. Soll heißen die werden nicht in den array spielfeld übernommen. und somit auch nicht über die Methode print der klasse Sudoku nicht ausgegeben. Entschuldigt meine mangelhafte Ausdrucksweise 🙂 Bin im erklären nicht der Held 🙂
 
Also ich habs mal ganz kurz getestet und bei mir übernimmt er den ersten Wert den ich getestet habe:
xrL1d.png


Hat das einen Grund, dass du ein byte-Array anstatt eines int-Arrays verwendest?
 
Îch hatte meinen fehler gefunden 🙂 er hat den wert übernommen, jedoch den array durchlaufen und die werte übernommen jedoch eine Spalte und eine zeile weiter, da die for schleifen bei 0 angefangen haben 🙂 trotzdem danke 🙂
 

Neue Themen


Zurück
Oben