Java Swing应用程序,对话框检查范围内的数字

时间:2015-10-31 15:49:25

标签: java swing

我正在与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为&lt; inVal时,此代码才会尝试设置IndexOutOfBoundsException 1或&gt; 4它会抓住并给我错误信息。这不起作用,如果我输入一个不在1到4之间的数字,我会得String。检查我是否输入无法解析为{{1}的int的工作正常}。有人能告诉我我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

问题在于:

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命名约定。

答案 1 :(得分:2)

更简单的解决方案是使用JOptionPane和一个包含值1-4的组合框。然后就不需要任何编辑检查。

阅读Getting User Input From a Dialog教程中的部分,了解如何完成此操作的示例。

或者如果你想坚持用户输入一个数字,那么本教程还包含一个关于Stopping Automatic Dialog Closing的部分,这有点复杂,但是使用JOptionPane的整体解决方案更好。