You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建TicTacToe类二维数组时触发NullPointerException的解决求助

问题原因

你触发NullPointerException的核心原因是:创建TicTacToe[][] ultGame = new TicTacToe[3][3];时,仅初始化了二维数组的容器结构,数组内的每个ultGame[a][b]元素默认都是null,没有实际创建TicTacToe对象实例,直接调用printBoard()自然会触发空指针异常。

你尝试方法的问题分析
  • 方法1:game[][] ultGame是语法错误,Java数组声明必须明确指定类型(即TicTacToe[][]),不能用变量名代替类型,所以编译器报错无法识别game。
  • 方法2:你发现元素都是null是正确的,但没有针对这个问题做修复(即实例化对象),所以问题依旧。
  • 方法3:ultGame[a][b].equals(null)本身会触发空指针——因为null对象无法调用任何方法(包括equals),正确的判空方式应该是ultGame[a][b] == null。
正确解决方案

在调用printBoard()之前,先为数组的每个元素实例化TicTacToe对象,修改后的主方法代码如下:

public class MyProgram
{
    public static void main(String[] args)
    {
        TicTacToe[][] ultGame = new TicTacToe[3][3];
        for(int a = 0; a < 3; a++)
        {
            for(int b = 0; b < 3; b++)
            {
                // 先实例化TicTacToe对象
                ultGame[a][b] = new TicTacToe();
                ultGame[a][b].printBoard();
            }
            System.out.println();
        }
    }
}
替代实现方式

如果你想在声明数组时直接完成对象初始化,可以用数组初始化器:

public class MyProgram
{
    public static void main(String[] args)
    {
        // 直接初始化每个位置的TicTacToe对象
        TicTacToe[][] ultGame = {
            {new TicTacToe(), new TicTacToe(), new TicTacToe()},
            {new TicTacToe(), new TicTacToe(), new TicTacToe()},
            {new TicTacToe(), new TicTacToe(), new TicTacToe()}
        };
        
        for(int a = 0; a < 3; a++)
        {
            for(int b = 0; b < 3; b++)
            {
                ultGame[a][b].printBoard();
            }
            System.out.println();
        }
    }
}

内容的提问来源于stack exchange,提问作者Keagran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:23:32