guten abend wünsch ich
hab mal ne ganz doofffeee frraagee also ich muss in mein programm eine beschreibung einfügen.. nun möchte ich das rechts schreiben, nur hab ich keine ahnung wo ich das in meinem code schreiben soll :bahnhof: danke für eure hilfe und hier mein code
hab mal ne ganz doofffeee frraagee also ich muss in mein programm eine beschreibung einfügen.. nun möchte ich das rechts schreiben, nur hab ich keine ahnung wo ich das in meinem code schreiben soll :bahnhof: danke für eure hilfe und hier mein code
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.*;
public class Sudoku extends JApplet implements Runnable, ActionListener {
private static final long serialVersionUID = 1L;
/** Das Modell */
protected int model[][];
/** Das Aussehen */
protected Button view[][];
private Container container;
private JLabel status;
private JButton btnSolve;
private JButton btnClear;
private int schritte = 0;
/** Schafft das Modell und stellt die Ausgangslage */
protected void createModel() {
model = new int[9][9];
clearModel();
}
private void clearModel() {
// Leere Zellen
for (int row = 0; row < 9; row++)
for (int col = 0; col < 9; col++)
model[row][col] = 0;
}
/** Erzeugt eine leere Ansicht */
protected void createView() {
container = getContentPane();
container.setLayout(new BorderLayout());
JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(9, 9));
container.add(jp1);
status = new JLabel("Sudoku");
view = new Button[9][9];
container.add(status, BorderLayout.NORTH);
btnSolve = new JButton("Lösen");
btnSolve.addActionListener(this);
btnClear = new JButton("Löschen");
btnClear.addActionListener(this);
JPanel jp2 = new JPanel();
container.add(jp2, BorderLayout.SOUTH);
jp2.add(btnSolve);
jp2.add(btnClear);
// Erzeugt eine leere Ansicht
for (int row = 0; row < 9; row++)
for (int col = 0; col < 9; col++) {
view[row][col] = new Button();
jp1.add(view[row][col]);
}
}
/** Der Blick aus dem Modell */
protected void updateView() {
for (int row = 0; row < 9; row++)
for (int col = 0; col < 9; col++)
if (model[row][col] != 0)
view[row][col].setLabel(String.valueOf(model[row][col]));
else
view[row][col].setLabel("");
}
/** Setzt auf die Schaltfläche Handler Werte ändern */
protected void setHandler(boolean delete) {
for (int row = 0; row < 9; row++) {
for (int col = 0; col < 9; col++) {
if (delete)
view[row][col].removeActionListener(this);
else
view[row][col].addActionListener(this);
}
}
}
/** Diese Methode wird vom Browser aufgerufen, wenn das Applet geladen wird */
public void init() {
createModel();
createView();
setHandler(false);
updateView();
}
/** Diese Methode wird von Browser aufgerufen, um das Applet zu starten */
public void start() {
// Diese Aussage beginnt das Verfahren nach einem neuen Thread ausgeführt
(new Thread(this)).start();
}
/** Der aktive Teil beginnt hier */
public void run() {
/*
* versuchen { // Lässt den Beutzer die Ausgangsposition sehen
* Thread.sleep(1000); // Start in das Rätsel zu lösen un der linken oberen
* ecke lösen (solve) (0,0); } verstehen (catch) (Exception e) { }
*/
}
/** Rekursive Funktion, um eine gültige Zahl der Suche nach einer einzelnen Zahl */
public boolean solve(int y, int x) {
if (y > 8) // Lösung gefunden
return true;
while (!(model[y][x] == 0)) {
if (++x > 8) {
x = 0;
y++;
if (y > 8)
return true;
}
}
for (int z = 1; z <= 9; z++) {
if (notBlocked(y, x, z)) {
model[y][x] = z;
schritte++;
updateView();
// versuchen {Thread.sleep(500);}verstehen(Exception e){}
if (x < 8) {
if (solve(y, x + 1))
return true;
} else {
if (solve(y + 1, 0))
return true;
}
}
}
model[y][x] = 0;
updateView();
return false;
}
private boolean notBlocked(int y, int x, int z) {
boolean result = true;
for (int i = 0; i < 9; i++) {
// y-Zeile
if (model[i][x] == z) {
result = false;
break;
}
// x-Spalte
if (model[y][i] == z) {
result = false;
break;
}
}
result = result && !quadrantBlocked(y, x, z);
return result;
}
private boolean quadrantBlocked(int y, int x, int z) {
boolean blocked = false;
int sy = (y / 3) * 3;
int sx = (x / 3) * 3;
for (int i = sy; i < sy + 3; i++) {
for (int j = sx; j < sx + 3; j++) {
if (model[i][j] == z) {
blocked = true;
break;
}
}
}
return blocked;
}
public void actionPerformed(ActionEvent arg0) {
boolean notPossible = false;
if (arg0.getSource().equals(btnSolve)) {
schritte = 0;
for (int row = 0; row < 9; row++)
for (int col = 0; col < 9; col++)
if (model[row][col] != 0) {
int z = model[row][col];
model[row][col] = 0;
if (!notBlocked(row, col, z)) {
model[row][col] = z;
notPossible = true;
break;
}
model[row][col] = z;
}
if (notPossible || !solve(0, 0)) {
JOptionPane.showMessageDialog(container,
"Keine Lösung gefunden!");
status.setText("Keine Lösung gefunden!");
} else
status.setText("Sudoku ist in " + String.valueOf(schritte)
+ " Schritten gelöst!");
} else if (arg0.getSource().equals(btnClear)) {
status.setText("Sudoku");
clearModel();
updateView();
} else {
int z = -1;
boolean error = true;
while (error) {
try {
error = false;
z = Integer.parseInt(JOptionPane.showInputDialog(container,
"Bitte Zahl eingeben!"));
if (z < 0 || z > 9)
throw new Exception("Bereich falsch");
} catch (Exception e) {
error = true;
}
}
try {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (((Button) arg0.getSource()).equals(view[i][j])) {
status.setText("Sudoku");
model[i][j] = z;
break;
}
}
updateView();
}
} catch (Exception e) {
}
}
}
}