Auf Thema antworten

Tut mir Leid, ich habe grade bemerkt dass ich ausversehen eine überholte Ausgabe geposted habe, bei der ich noch einen weiteren Fehler hatte (Merke: Datei nicht in verschiedenen Ordnern speichern).


Der gesamte Quelltext lautet:

[code=Java]import java.awt.*;

import java.awt.event.*;


import javax.swing.*;

import javax.swing.event.*;



/**

  *

  * Beschreibung

  *

  * @version 1.0 vom 15.11.2010

  * @author Christoph

  */

public class sudoku extends JFrame {

  // Anfang Attribute

  private JTextField[][] NF = new JTextField[9][9];

  int[][] feld = new int[9][9];

  private JButton jButton1 = new JButton();


  // Ende Attribute

  public sudoku(String title) {

    // Frame-Initialisierung

    super(title);

    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);


    int frameWidth = 400;

    int frameHeight = 400;

    setSize(frameWidth, frameHeight);


    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

    int x = (d.width - getSize().width) / 2;

    int y = (d.height - getSize().height) / 2;

    setLocation(x, y);


    Container cp = getContentPane();

    cp.setLayout(null);


    // Anfang Komponenten

    for (int j = 0; j < 9; j++) {

      for (int i = 0; i < 9; i++) {

        NF[j][i] = new JTextField("0");

        NF[j][i].setBounds(65 + (j * 30), 16 + (i * 30), 30, 30);

        cp.add(NF[j][i]);

      }

    }


    jButton1.setBounds(160, 328, 75, 25);

    jButton1.setText("loesen");

    jButton1.setMargin(new Insets(2, 2, 2, 2));

    jButton1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent evt) {

          jButton1_ActionPerformed(evt);

        }

      });

    cp.add(jButton1);

    // Ende Komponenten

    setResizable(false);

    setVisible(true);

  }


  // Anfang Methoden

  public void jButton1_ActionPerformed(ActionEvent evt) {

    speichern();

    if (!loese(feld)) {

      for (int i = 0; i < 9; i++) {

        for (int j = 0; j < 9; j++) {

          System.out.print(feld[j][i] + "," + ((j == 8) ? "\r\n" : ""));

        }

      }

    }

  }


  void speichern() {

    for (int i = 0; i < 9; i++) {

      for (int j = 0; j < 9; j++) {

        try {

          feld[j][i] = ((Integer.parseInt(NF[j][i].getText()) > 0)

                        ? Integer.parseInt(NF[j][i].getText()) : 0);

          System.out.print(feld[j][i] + "," + ((j == 8) ? "\r\n" : ""));

        } catch (Exception e) {

        }

      }

    }

  }


  boolean loese(int[][] f) {

    //    System.out.println(f[suche(f) % 10][(int) suche(f) / 10] + "," +

    //                       (suche(f) % 10) + "," + ((int) suche(f) / 10));

        int x = suche(f) % 10;

    int y = (int) suche(f) / 10;

    System.out.println(x + "," + y);


    int[][] test = new int[9][9];

    test = f;

    if (suche(f) == -1) {

      feld = test;


      for (int i = 0; i < 9; i++) {

        for (int j = 0; j < 9; j++) {

        NF[j][i].setText(Integer.toString(feld[j][i]));

        System.out.print(feld[j][i] + "," + ((j == 8) ? "\r\n" : ""));

        }

      }

    }




    for (int i = 1; i < 10; i++) {

    System.out.println(i+"zähler");

      if (reihe(i, y, f) && spalte(i, x, f) && block(i, x, y, f)) {

        test[x][y] = i;

        NF[x][y].setText(Integer.toString(test[x][y]));

        System.out.println(test[x][y]);

        loese(test);

      }

    }

    System.out.println("return"+x+","+y);

    return false;

  }


  boolean reihe(int z, int y, int[][] fel) {

    boolean gibtsnet = true;


    for (int i = 0; i < 9; i++) {

      if (z == fel[i][y]) {

        return false;

      }

    }


    return gibtsnet;

  }


  boolean spalte(int z, int x, int[][] fel) {

    boolean gibtsnet = true;


    for (int i = 0; i < 9; i++) {

      if (z == fel[x][i]) {

        return false;

      }

    }


    return gibtsnet;

  }


  boolean block(int z, int x, int y, int[][] fel) {

        int i_start = (int)(x/3) * 3;

    int j_start = (int)(y/3) * 3;


    for(int a=i_start; a<i_start+3; a++)

        for(int b=j_start; b<j_start+3; b++)

          if(fel[a][b] == z){

                return false;

                }



    return true;


  }


  int suche(int[][] fe, int z) {

    for (int i = 0; i < fe.length; i++) {

      for (int j = 0; j < fe.length; j++) {

        if (fe[j][i] == z) {

          return (10 * i) + j;

        }

      }

    }

     // System.out.println("falsch");

    return -1;

  }


  int suche(int[][] fe) {

    for (int i = 0; i < 9; i++) {

      for (int j = 0; j < 9; j++) {

        if (fe[j][i] == 0) {

          return (10 * i) + j;

        }

      }

    }


    return -1;

  }


  // Ende Methoden

  public static void main(String[] args) {

    new sudoku("sudoku");

  }

}

[/code]


Die Ausgabe ist:

1,2,3,4,5,6,7,8,9,

4,5,6,7,8,9,3,2,1,

7,8,9,1,2,3,4,5,6,

2,1,4,3,6,5,8,9,7,

3,6,7,2,9,8,1,4,5,

5,9,8,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,


reihe(),spalte() und block() überprüfen ob die Zahl i in einer bereits vorkommt, also ob sie ungültig ist.



Oben