我正在与1-4位玩家进行纸牌游戏。当我开始新游戏时,它将实例化一个类DialogCreator,要求您输入所需的玩家数量。这是DialogCreator的代码:

private class DialogCreator {
    /**
     * Creates a dialog for the input of how many players you want in the game.
     * Takes an integer between 1 and 4.
     * @param msg
     * @return
     */
    int createIntDialog(String msg) {
        String inValue = null;
        String error_msg = "";

        int v = 0;

        while ((inValue = JOptionPane
                .showInputDialog(msg + error_msg + ":")) != null) {
            error_msg = "";
            int inVal = Integer.parseInt(inValue);
            try {
                if(inVal >= 1 && inVal <= 4)
                    v = inVal;
                break;
            } catch (NumberFormatException nfe) {
                error_msg = "(Entered values can only be integers between 1 and 4)";
            }
        }
        return v;
    }
}


我认为只有在v = inVal 1 <= inVal的情况下,此代码才会尝试设置>= 4,并且如果inVal是 4,它将捕获并显示错误消息。这不起作用,如果我输入的数字不在1到4之间,则会得到一个IndexOutOfBoundsException。它可以很好地检查我是否输入了不能解析为Stringint。有人可以告诉我我在做什么错吗?

最佳答案

问题在这里:

if(inVal >= 1 && inVal <= 4)
    v = inVal;
break;


如果没有大括号,则只有v = inVal;在if语句下。因此,无论inVal是什么,您都将退出while循环并返回0(v初始化为0)。然后,我猜想如果此方法返回0,则其余代码将失败。如果在周围加上花括号,则可以确保仅在输入有效时才会断开:

if(inVal >= 1 && inVal <= 4) {
    v = inVal;
    break;
}


附带说明一下,您应该与命名保持一致:error_msg不遵守Java命名约定。

09-11 20:31