java - 为什么这会抛出 NullPointerException?

标签 java nullpointerexception game-engine

空指针通常意味着某个参数中存在程序员错误,可以查看我的代码以确保我没有错过任何明显的东西吗?

这只是一个简单的基于%的扑克机器人,很确定这就是它“认为”错误的地方。

public Action act(Set<Action> actions) {
    Random generator = new Random();
    int roll = generator.nextInt(100) + 1; //gives number between 1 and 100
    System.out.println("roll = " + roll);
    Action myAction = null;

    if (roll <= 30) { // RAISE 30%
        if (actions.contains(Action.RAISE)) {
            myAction = Action.RAISE;
        } else if (actions.contains(Action.BET)) {
            myAction = Action.BET;
        } else if (actions.contains(Action.CALL)) {
            myAction = Action.CALL;
        }
    } else if (roll > 30 && roll <= 90) { // CALL/CHECK 60%
        if (actions.contains(Action.CALL)) {
            myAction = Action.CALL;
        } else if (actions.contains(Action.CHECK)) {
            myAction = Action.CHECK;
        }
    } else if (roll > 90) { // FOLD 10%
        if (actions.contains(Action.FOLD)) {
            myAction = Action.FOLD;
        }

    return myAction;
}

}

编辑:

这是添加的设置Action方法:

public Action act(Set<Action> actions, int minBet, int currentBet) {
    action = client.act(actions);
    switch (action) {
        case CHECK:
            break;
        case CALL:
            betIncrement = currentBet - bet;
            if (betIncrement > cash) {
                //TODO: All-in with partial Call.
                betIncrement = cash;
            }
            cash -= betIncrement;
            bet += betIncrement;
            break;
        case BET:
            betIncrement = minBet;
            if (betIncrement >= cash) {
                //TODO: All-in with partial Bet.
                betIncrement = cash;
            }
            cash -= betIncrement;
            bet += betIncrement;
            raises++;
            break;
        case RAISE:
            currentBet += minBet;
            betIncrement = currentBet - bet;
            cash -= betIncrement;
            bet += betIncrement;
            raises++;
            break;
        case FOLD:
            hand.removeAllCards();
            break;
    }
    return action;
}

Action方法继承自接口(interface)类Client.java:

Action act(Set<Action> allowedActions);

非常感谢!

解决方案:

当我尝试运行两个相同的机器人时,它在某处发生冲突,导致空指针。当我使用任意两个不同的机器人时,它运行良好,没有错误。

最佳答案

不清楚你从哪里得到 NPE,但我敢打赌输入参数为空

 Set<Action> actions

关于java - 为什么这会抛出 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15889365/

相关文章:

java - 从哪里开始 Java 项目

Java - 通过循环用 ImageIcons 填充 JLabels 数组(NullPointerException)

EditText 上的android random NullPointerException

java - NPE at sun.nio.ch.Util.free(Util.java :199)

algorithm - 避免在 2D 游戏引擎中嵌套 for 循环

java - 检查并打印嵌套的 Javabean 属性

java - 更新到 mongo 3.0

java - 为什么不是所有的 Java 类都有接口(interface)?

php - 如何使用 PHP 加快查询速度?

java - 简单的Java游戏引擎/库