I am building a Tic Tac Toe game in Java and a created an endGame() func to see if a player has won. When I was testing it, I saw that in some cases it did not work how it was supposed to(for ex. when I was testing the 3rd col vertically, the function would return after I press like 2 other buttons and the return value wasn't always right). I just moved the if statement up and it worked but the last 2 cases didn't. This is the code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameFrame extends JFrame {
private JPanel panel;
private JLabel result;
private JButton[][] buttons = new JButton[3][3];
private boolean isXTurn = true;
private boolean gameOver = false;
public GameFrame() {
setProperties();
init();
setUI();
}
public void setProperties() {
setSize(300,300);
setLocationRelativeTo(null);
setTitle("Tic Tac Toe");
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void init() {
result = new JLabel("");
panel = new JPanel(new GridLayout(3,3));
for(int i = 0;i < buttons.length;i++) {
for(int j = 0;j < buttons[i].length;j++) {
buttons[i][j] = new JButton();
int finalI = i;
int finalJ = j;
buttons[i][j].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(isXTurn) {
if(!buttons[finalI][finalJ].getText().equals("O")) {
buttons[finalI][finalJ].setText("X");
isXTurn = false;
}
if(!endGame().equals("")) {
System.out.println(endGame());
}
} else {
if(!buttons[finalI][finalJ].getText().equals("X")) {
buttons[finalI][finalJ].setText("O");
isXTurn = true;
}
System.out.println(endGame());
}
}
});
}
}
}
public void setUI() {
for(int i = 0;i < buttons.length;i++) {
for(int j = 0;j < buttons[i].length;j++) {
panel.add(buttons[i][j]);
}
}
add(panel);
}
public String endGame() {
if(buttons[0][2].getText().equals(buttons[1][2].getText()) && buttons[1][2].getText().equals(buttons[2][2].getText())) {
return buttons[0][2].getText();
}
if(buttons[0][1].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[2][1].getText())) {
return buttons[0][1].getText();
}
if(buttons[0][0].getText().equals(buttons[0][1].getText()) && buttons[0][1].getText().equals(buttons[0][2].getText())) {
return buttons[0][0].getText();
}
if(buttons[1][0].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[1][2].getText())) {
return buttons[1][0].getText();
}
if(buttons[2][0].getText().equals(buttons[2][1].getText()) && buttons[2][1].getText().equals(buttons[2][2].getText())) {
return buttons[2][0].getText();
}
if(buttons[0][0].getText().equals(buttons[1][0].getText()) && buttons[1][0].getText().equals(buttons[2][0].getText())) {
return buttons[0][0].getText();
}
if(buttons[0][0].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[2][2].getText())) {
return buttons[0][0].getText();
}
if(buttons[0][2].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[2][0].getText())) {
return buttons[0][2].getText();
}
return "";
}
}