Hi,
ich habe ein programm, was ein Solitärspiel lösen kann. Diesem Program wollte ich eine Oberfläche verpassen. Habe etwas rumkopiert und es hat bis zu einem bestimmten Punkt funktioniert. Es kommt jedes mal der Fehler "test_erweiert.java:125: non-static method printBoard() cannot be referenced from a static context" ? Was ist mein Fehler? Ich hoffe ihr könnt mir helfen.
ich habe ein programm, was ein Solitärspiel lösen kann. Diesem Program wollte ich eine Oberfläche verpassen. Habe etwas rumkopiert und es hat bis zu einem bestimmten Punkt funktioniert. Es kommt jedes mal der Fehler "test_erweiert.java:125: non-static method printBoard() cannot be referenced from a static context" ? Was ist mein Fehler? Ich hoffe ihr könnt mir helfen.
Code:
import java.awt.*;
import java.awt.event.*;
public class test_erweiert extends Frame {
// Anfang Variablen
private TextArea brett = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
private Button start_button = new Button();
private Button button2 = new Button();
private static int start[][] = {
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 },
{ 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8 },
{ 8, 8, 0, 0, 0, 1, 0, 0, 0, 8, 8 },
{ 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8 },
{ 8, 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }
};
private final static int end[][] = {
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 1, 1, 1, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 1, 1, 1, 8, 8, 8, 8 },
{ 8, 8, 1, 1, 1, 1, 1, 1, 1, 8, 8 },
{ 8, 8, 1, 1, 1, 0, 1, 1, 1, 8, 8 },
{ 8, 8, 1, 1, 1, 1, 1, 1, 1, 8, 8 },
{ 8, 8, 8, 8, 1, 1, 1, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 1, 1, 1, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }
};
private static int equal = 0;
// Ende Variablen
public test_erweiert(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 300;
int frameHeight = 300;
setSize(frameWidth, frameHeight);
Panel cp = new Panel(null);
add(cp);
// Anfang Komponenten
brett.setBounds(16, 16, 209, 89);
brett.setText("(Strings)");
cp.add(brett);
start_button.setBounds(24, 112, 89, 33);
start_button.setLabel("Start");
cp.add(start_button);
start_button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button1ActionPerformed(evt);
}
});
button2.setBounds(120, 112, 81, 33);
button2.setLabel("button2");
cp.add(button2);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button2ActionPerformed(evt);
}
});
// Ende Komponenten
setResizable(false);
setVisible(true);
}
// Anfang Ereignisprozeduren
public void button1ActionPerformed(ActionEvent evt) {
printBoard();
}
public void button2ActionPerformed(ActionEvent evt) {
check();
}
void printBoard(){
String feld=""; // Zeichnung des Brettes wird erstellt
String a=" ";
String b="*";
for (int y = 2; y < 9; y++) {
for (int x = 2; x < 9; x++) {
switch (start[y][x]) {
case 8:
feld=feld+a;
break;
case 1:
feld=feld+b;
break;
case 0:
String c="0";
feld=feld+c;
break;
}
} feld=feld+"\n";
brett.setText(feld);
}
brett.setText(feld);
}
private static boolean check() { //HIER KOMMT DER FEHLER
if (equal == 49) {
System.out.println("eine Lösung gefunden:");
System.out.println();
printBoard();
return true;
}
for (int x = 2; x < 9; x++) {
for (int y = 2; y < 9; y++) {
if (start[y][x] == 0) { // wird 1. Null gesucht
if (start[y + 1][x] == 0 && start[y + 2][x] == 1) {
int d = 0;
if (start[y][x] == end[y][x])
d++;
if (start[y + 1][x] == end[y + 1][x])
d++;
if (start[y + 2][x] == end[y + 2][x])
d++;
d = 3 - d - d;
equal += d;
start[y][x] = 1;
start[y + 1][x] = 1;
start[y + 2][x] = 0;
boolean result = check();
equal -= d;
start[y][x] = 0;
start[y + 1][x] = 0;
start[y + 2][x] = 1;
if (result) {
printBoard();
return true;
}
}
if (start[y - 1][x] == 0 && start[y - 2][x] == 1) {
int d = 0;
if (start[y][x] == end[y][x])
d++;
if (start[y - 1][x] == end[y - 1][x])
d++;
if (start[y - 2][x] == end[y - 2][x])
d++;
d = 3 - d - d;
equal += d;
start[y][x] = 1;
start[y - 1][x] = 1;
start[y - 2][x] = 0;
boolean result = check();
equal -= d;
start[y][x] = 0;
start[y - 1][x] = 0;
start[y - 2][x] = 1;
if (result) {
printBoard();
return true;
}
}
if (start[y][x + 1] == 0 && start[y][x + 2] == 1) {
int d = 0;
if (start[y][x] == end[y][x])
d++;
if (start[y][x + 1] == end[y][x + 1])
d++;
if (start[y][x + 2] == end[y][x + 2])
d++;
d = 3 - d - d;
equal += d;
start[y][x] = 1;
start[y][x + 1] = 1;
start[y][x + 2] = 0;
boolean result = check();
equal -= d;
start[y][x] = 0;
start[y][x + 1] = 0;
start[y][x + 2] = 1;
if (result) {
printBoard();
return true;
}
}
if (start[y][x - 1] == 0 && start[y][x - 2] == 1) {
int d = 0;
if (start[y][x] == end[y][x])
d++;
if (start[y][x - 1] == end[y][x - 1])
d++;
if (start[y][x - 2] == end[y][x - 2])
d++;
d = 3 - d - d;
equal += d;
start[y][x] = 1;
start[y][x - 1] = 1;
start[y][x - 2] = 0;
boolean result = check();
equal -= d;
start[y][x] = 0;
start[y][x - 1] = 0;
start[y][x - 2] = 1;
if (result) {
printBoard();
return true;
}
}
}
}
}
return false;
}
// Ende Ereignisprozeduren
public static void main(String[] args) {
new test_erweiert("Solitär");
for (int x = 2; x < 9; x++) {
for (int y = 2; y < 9; y++) {
if (start[y][x] == end[y][x])
equal++;
}
}
if (!check()) {
System.out.println("keine Lösung gefunden");
System.out.println();
}
}
}