Java 在NXN井字游戏中确定赢家

Java 在NXN井字游戏中确定赢家,java,multidimensional-array,tic-tac-toe,Java,Multidimensional Array,Tic Tac Toe,我尝试用play和Haswen方法创建一个Tic-Tac-Toe游戏类 public class TicTacToe { private enum State{Blank, X, O} private int grid; private State[][] board = new State[grid][grid]; private int moves; //Default Constructor public TicTacToe(int grid){ board = new S

我尝试用play和Haswen方法创建一个Tic-Tac-Toe游戏类

public class TicTacToe {

private enum State{Blank, X, O}
private int grid;
private State[][] board = new State[grid][grid];
private int moves;


//Default Constructor
public TicTacToe(int grid){

    board = new State[grid][grid];
    moves = 0;
}
public void play(State s, int m, int n){

    if (board[m][n] == State.Blank){
        board[m][n] = s;
    }
    moves++;
}




public boolean hasWon(State[][] board){

    //check winner in rows
    boolean state = false;
    int j = 0;
    int i = 0;
    while(j <= grid) {
        for (i = 0; i <= grid; i++) {
            if (board[j][i] == board[j][i + 1])
                state = true;
            else state = false;
            break;

        }
        if(state == false)
            j++;
        else return true;

    }
    //check winner in columns
    while(j <= grid) {
        for (i = 0; i < grid; i++) {
            if (board[i][j] == board[i + 1][j])
                state = true;
            else state = false;
            break;

        }
        if (state == true)
            j++;
        else return true;
    }
    //check winner in top diagonal
    while(j <= grid && i <= grid){
        if (board[i][j] == board[i+1][j+1])
            state = true;
        else state = false;
        break;

        i++;
        j++;
        return true;
    }


    //check winner in bottom diagonal
    int k = grid;
    int l = grid;
    while(k >= 0 && l >= 0){
        if (board[k][l] == board[k-1][l-1])
            state = true;
        else state = false;
        break;
        k--;
        l--;
        return true;
    }


    return false;
}
公共类TicTacToe{
私有枚举状态{Blank,X,O}
私有int网格;
私有国家[]董事会=新国家[电网][电网];
私人内部移动;
//默认构造函数
公共交通(国际电网){
董事会=新国家[电网][电网];
移动=0;
}
公共无效播放(状态s、int m、int n){
如果(线路板[m][n]==状态为空){
板[m][n]=s;
}
移动++;
}
公立学校(州[]委员会){
//按行检查获胜者
布尔状态=假;
int j=0;
int i=0;

而(j当用

for (i = 0; i < n; i++) {
    if (board[j][i] == board[j][i + 1])
        state = true;
}

什么是“不稳定的”确切地说,这是什么意思?在某些情况下,它是给一个赢家,而在其他情况下则不是。你需要排成一行多少人?3?好吧,首先,你只是比较一条对角线。你可以尝试为方法
haswown
实现一些单元测试,并在返回错误结果时找到案例。这是一个非常有用的练习。编辑以更改t结果数组。@Clockwork您编辑它的方式不起作用,因为
break
命令现在会导致循环在第一次迭代中直接停止。
break
只能在检测到不同的值时使用。
for (i = 0; i < n; i++) {
    if (board[j][i] == board[j][i + 1]) {
        state = true;
    } else {
        state = false;
        break;
    }
}
this.grid = grid;