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.