Java 将多个对象添加到2D阵列(Tictatcoe游戏)

Java 将多个对象添加到2D阵列(Tictatcoe游戏),java,arrays,Java,Arrays,我已经看过了,但还没有找到答案,所以我想问一下 这是作业详细信息的PDF,但我的详细信息和代码应该足够了 我正在为一个Tic-Tac-Toe游戏做一个多类作业,我很难理解为什么在添加了所有对象后它无法编译。它返回空值,即使我已经用内容初始化了整个2D数组 这是我的完整程序,我将在底部包括有问题的代码 这是X或O对象类 public class XO{ private String name; private static int turn = 1; public XO(String name)

我已经看过了,但还没有找到答案,所以我想问一下

这是作业详细信息的PDF,但我的详细信息和代码应该足够了

我正在为一个Tic-Tac-Toe游戏做一个多类作业,我很难理解为什么在添加了所有对象后它无法编译。它返回空值,即使我已经用内容初始化了整个2D数组

这是我的完整程序,我将在底部包括有问题的代码

这是X或O对象类

public class XO{
private String name;
private static int turn = 1;

public XO(String name)
{
    if(name == "-")
    {
        name = "-";
    }
    else if(2%turn == 0)
    {
        turn++;
        name = "X";
    }
    else if (2%turn == 1)
    {
        turn++;
        name = "O";
    }
}
public String getName()
{
    return name;
}
public int getTurn()
{
    return turn;
}
public boolean equals(XO xo)
{
    if(xo.getName().equals(name))
    {
        return true;
    }
    else
        return false;
}
public String toString()
{
    return name;

}}
public class Board {
protected int rows = 2;
protected int cols = 2;

public Board(int x, int y)
{
    rows = x;
    cols = y;
}
public int getRows()
{
    return rows;
}
public int getCols()
{
    return cols;
}
public void setRows(int r)
{
    rows = r;
}
public void setCols(int c)
{
    cols = c;
}}
这是TicTakToeBoard类的board“超级”类

public class XO{
private String name;
private static int turn = 1;

public XO(String name)
{
    if(name == "-")
    {
        name = "-";
    }
    else if(2%turn == 0)
    {
        turn++;
        name = "X";
    }
    else if (2%turn == 1)
    {
        turn++;
        name = "O";
    }
}
public String getName()
{
    return name;
}
public int getTurn()
{
    return turn;
}
public boolean equals(XO xo)
{
    if(xo.getName().equals(name))
    {
        return true;
    }
    else
        return false;
}
public String toString()
{
    return name;

}}
public class Board {
protected int rows = 2;
protected int cols = 2;

public Board(int x, int y)
{
    rows = x;
    cols = y;
}
public int getRows()
{
    return rows;
}
public int getCols()
{
    return cols;
}
public void setRows(int r)
{
    rows = r;
}
public void setCols(int c)
{
    cols = c;
}}
这是TictaToe的专用板

public class TicTakToeBoard extends Board{
private static XO board [][];
private int turnCnt = 1;

public TicTakToeBoard(int r, int c)
{
    super(r, c);
    rows = r;
    cols = c;
    board = new XO[rows][cols];
    setXOBoard(rows, cols);
}
public int getBoardRow()
{
    return rows;
}
public int getBoardCols()
{
    return cols;
}
public int getTurnCnt()
{
    return turnCnt;
}
public void setXOBoard(int r, int c)
{
    XO empty = new XO("-");
    XO[][] board = new XO[getBoardRow()][getBoardCols()];
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++) 
        {
            board[i][j] = (empty);
        }
    }
}
public XO getXOBoard(int r, int c)
{
    return board[r][c];
}
public boolean add(int x, int y)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 2; i > cols; j--)
        {
            if(board [x][y] != board [i][j])
            {
                if(x <= 2 || x >= 0 && y <= 2 || y >= 0)
                {
                    if(2%turnCnt == 0)
                        board[x][y] = new XO("X");
                    if(2%turnCnt == 1)
                        board[x][y] = new XO("O");
                    turnCnt++;
                    return true;
                }
                else if(x > 2 || x < 0 && y > 2 || y < 0)
                {
                    return false;
                }
            }
        }
    }
    return false;
}
public boolean winner(XO a, XO b)
{
    if(board [0][0] == a && board [1][0] == a && board [2][0] == a)
    {
        return true;
    }
    if(board [0][1] == a && board [1][1] == a && board [2][1] == a)
    {
        return true;
    }
    if(board [0][2] == a && board [1][2] == a && board [2][2] == a)
    {
        return true;
    }
    if(board [0][0] == a && board [0][1] == a && board [0][2] == a)
    {
        return true;
    }
    if(board [1][0] == a && board [1][1] == a && board [1][2] == a)
    {
        return true;
    }
    if(board [2][0] == a && board [2][1] == a && board [2][2] == a)
    {
        return true;
    }
    if(board [0][0] == a && board [1][1] == a && board [2][2] == a)
    {
        return true;
    }
    if(board [2][0] == a && board [1][1] == a && board [0][2] == a)
    {
        return true;
    }
    //Above player 1 wins, below player 2 wins
    if(board [0][0] == b && board [1][0] == b && board [2][0] == b)
    {
        return true;
    }
    if(board [0][1] == b && board [1][1] == b && board [2][1] == b)
    {
        return true;
    }
    if(board [0][2] == b && board [1][2] == b && board [2][2] == b)
    {
        return true;
    }
    if(board [0][0] == b && board [0][1] == b && board [0][2] == b)
    {
        return true;
    }
    if(board [1][0] == b && board [1][1] == b && board [1][2] == b)
    {
        return true;
    }
    if(board [2][0] == b && board [2][1] == b && board [2][2] == b)
    {
        return true;
    }
    if(board [0][0] == b && board [1][1] == b && board [2][2] == b)
    {
        return true;
    }
    if(board [2][0] == b && board [1][1] == b && board [0][2] == b)
    {
        return true;
    }
    else
        return false;
}
public String toString()
{
    return board[0][0]+"\t"
+board[1][0]+"\t"
            +board[2][0]+"\n"
+board[0][1]+"\t"
            +board[1][1]+"\t"
+board[1][2]+"\n"
            +board[0][2]+"\t"
+board[1][2]+"\n"
            +board[2][2];
}}
这在很大程度上是有问题的方法,但我很乐意接受您指出的任何其他错误。

public boolean add(int x, int y)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 2; i > cols; j--)
        {
            if(board [x][y] != board [i][j])
            {
                if(x <= 2 || x >= 0 && y <= 2 || y >= 0)
                {
                    if(2%turnCnt == 0)
                        board[x][y] = new XO("X");
                    if(2%turnCnt == 1)
                        board[x][y] = new XO("O");
                    turnCnt++;
                    return true;
                }
                else if(x > 2 || x < 0 && y > 2 || y < 0)
                {
                    return false;
                }
            }
        }
    }
    return false;}
公共布尔加法(整数x,整数y)
{
对于(int i=0;icols;j--)
{
if(board[x][y]!=board[i][j])
{
如果(x=0&&y=0)
{
如果(2%营业额==0)
董事会[x][y]=新的XO(“x”);
如果(2%营业额==1)
董事会[x][y]=新的XO(“O”);
turnCnt++;
返回true;
}
else如果(x>2 | | x<0&&y>2 | | y<0)
{
返回false;
}
}
}
}
返回false;}
我知道我在这里需要很多帮助,但如果有任何帮助,我们都会非常感激,因为我们并没有很好地学习2D数组或继承,所以我只能从讲义中学习。至少可以说,这项任务占用了我春假的几天时间,其余的时间都在为此而紧张

非常感谢,我会考虑一下,明天再来:)

你的循环不会做任何事情
r
开头为0,且0不大于或等于3<代码>r你有一行:

private static XO board [][];
您从未将数组分配给它,也就是说,您没有分配内存来存放
XO
s。您需要这样做:

board = new XO[rows][cols]; // allocate memory to hold your XO's
setXOBoard(rows,cols);

啊,是的,它帮助了很多!唯一的问题是,它仍然有一些错误,我不知道该怎么办。它仍然无法编译。我将在稍后更新该线程。这是手头的问题和细节。
board = new XO[rows][cols]; // allocate memory to hold your XO's
setXOBoard(rows,cols);