为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中搜索二维数组的 For 循环返回 NullPointerException

在 Java 中搜索二维数组的 For 循环返回 NullPointerException

慕后森 2021-08-25 10:12:52
对于大学的一个项目,我必须创建一个井字游戏。我有这个for带有if语句的循环来搜索 3x3 大小的二维数组,如果它是X或O(枚举),则返回。这导致显示哪一方赢得了比赛。但是,我遇到的问题是,如果 2D 数组不完整,就像所有 9 个框都没有填充X或 一样O,该方法会显示NullPointerException.编辑:我必须补充一点,我要求空网格与null其他单元测试假设grid[][]初始化为null.错误:Exception in thread "main" java.lang.NullPointerExceptionat TicTacToeImplementation.whoHasWon(TicTacToeImplementation.java:80)at ApplicationRunner.main(ApplicationRunner.java:24)代码:public enum Symbol {    X, O}private Symbol winner;public Symbol whoHasWon() {    for (Symbol xORo : Symbol.values()) {        if ((grid[0][0].equals(xORo) &&                grid[0][1].equals(xORo) &&                grid[0][2].equals(xORo))) {            winner = xORo;            isGameOver = true;            break;        } else if ((grid[1][0].equals(xORo) &&                grid[1][1].equals(xORo) &&                grid[1][2].equals(xORo))) {            winner = xORo;            isGameOver = true;            break;}           else if { //Code carries on to account for all 8 different ways of winning        } else {            isGameOver = true;        }    }    return winner;}
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

正如指出这个帖子,你可以使用equals()或==比较枚举,但使用==是null安全的,而equals()不是。


所以基本上,只需像这样写你的支票:


if (grid[0][0] == xORo &&

    grid[0][1] == xORo &&

    // etc.

但是,如果您想使用该equals()方法,您可以编写一个方法来检查null然后比较两个值并返回结果:


public boolean isEqual(Symbol s1, Symbol s2) {

    if (s1 != null && s1.equals(s2)) {

        return true;

    }

    return false;

}

然后,您可以isEqual()像这样调用该方法:


if (isEqual(grid[0][0], xORo) &&

    isEqual(grid[0][1], xORo) &&

    // etc.


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信