Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hab da mal ne Frage an euch, da ich gerade Graue Haare bekomme. Und zwar wollte ich mich mal an einem Schachspiel versuchen und habe Probleme das Brett zeichnen zu lassen.
Hier erst mal der Code:
Java:
public class chessBoard extends JFrame{
JPanel buttons, game;
JLabel[][] board;
JButton reset;
chessBoard() {
this.setSize(800,600);
this.buttons = new JPanel();
this.game = new JPanel();
this.game.setLayout(new GridLayout(8,8));
this.add(this.game);
this.board = new JLabel[8][8];
for (int x = 0; x < this.board.length; x++) {
for (int y = 0; y < this.board[x].length; y++) {
this.board[x][y] = new JLabel(x +"/"+ y);
this.board[x][y].setOpaque(true);
this.game.add(this.board[x][y]);
}
}
for (int x = 0; x < this.board.length; x++) {
for (int y = 0; y < this.board[x].length; y++) {
if (x + y %2 == 0) {
this.board[x][y].setBackground(Color.black);
} else if (x + y %2 == 1) {
this.board[x][y].setBackground(Color.white);
}
}
}
}
public static void main(String[] args) {
chessBoard window = new chessBoard();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
}
So. Das Problem das ich habe ist, das er das Label board in der ersten Runde komplett richtig einfärbt ( board[0][0] - board[0][7] sind abwechselnd Schwarz und Weiß gefärbt), in der zweiten Runde wärden nur noch die eingefärbt die Weiß sein sollen (also board[1][0] - board[1][7] warum auch immer) und ab der Dritten runde wird gar nix mehr eingefärbt. Ich hab da mal nen Screen von gemacht, damit man sich das besser vorstellen kann:
Und zum schluss noch ne kleine Info, die Imports hab ich rausgelassen, die sind im Programm aber da. Und die Main fliegt da auch noch raus in ne eigene Klasse, wollte erst mal schauen ob es vieleicht daran liegt.
Ich hoffe irgendjemand kann mir da weiterhelfen. Danke schon mal im Vorraus.
if (x + y %2 == 0) {
this.board[x][y].setBackground(Color.black);
} else if (x + y %2 == 1) {
this.board[x][y].setBackground(Color.white);
}
jedes Feld ist entweder weiß oder schwarz, wieso machst du denn ein nochmal kompliziertes else if, und nicht einfach nur else?
und gibt doch in deiner Schleife mit System.out.println() oder einem Debugger aus, was 'x + y %2' genau ist für jedes x und y,
an dem Wert fällt dir dann vielleicht was auf
System.out.println() löst die meisten Dinge ganz einfach, kannst du dir ruhig merken,
ist der erste Befehl bei Hello World und bleibt auch der wichtigste,
nicht annehmen was deine Code-Befehle wohl richtigerweise tun, sondern nachschauen!
@Slater: Das ElseIf war ein Test gewesen um zu schauen ob er überhaupt was macht oder einfach den else einsetzt. Bevor ich das gesehen habe war es nur ein Else. Die Idee mit dem SysOut war zu einfach, da bin ich echt nicht drauf gekommen. Ich hab schon die ganze Zeit überlegt, wie ich damit testen kann ob er dort überhaupt was macht. mir aber einfach mal den Wert auszugeben, war dann aber auch schon zu offensichtlich.
@triopsfreak: Dein Ansatz funktioniert einwandfrei. Danke dir.
EDIT: Ich habs mit dem SysOut mal ausprobiert, warum er mir aber bei 7 + 7 modolo 2 8 ausgibt weiß ich auch nicht. Weil eigendlich müsste es null sein, da modolo ja immer nur den Rest ausgibt.
Den Fehler habe ich nun gefunden, aber ein bisschen rätseln darfst du auch noch
In Mathe gibts doch solche Regeln, eine davon lautet punkt vor strich, ich würde Modulo jetzt mal zu Punkt zählen...
du willst mir jetzt nicht allen ernstes sagen, das es daran liegt, weil ich doofbaddel vergessen habe x + y in Klammern zu setzen oder? Meine Fresse bin ich dämlich.
so ist das Leben, und selbst wenn du nicht von selber drauf gekommen wärst, wieso "7 + 7 modolo 2 8 ausgibt",
dann wäre das eine viel zielgerichtetere Frage ans Forum als eine komplizierte Schleife in einer GUI zu posten,
gut in diesem Fall war es auch so leicht