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

标签 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如果 inVal是 < 1 或 > 4 它会捕获并给我错误消息。这不起作用,我得到一个 IndexOutOfBoundsException如果我输入一个不在 1 到 4 之间的数字。检查我是否输入 String 效果很好。无法解析为 int 。有人可以告诉我我在这里做错了什么吗?

最佳答案

问题出在这里:

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

关于Java Swing 应用程序,对话框检查范围内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33453490/

相关文章:

java - 如何在学生对象的数组列表中查找 ID

java - 如何设置对象在JFrame 中的位置?

java - 我的 JFrame 背景不会改变

java - 如何在 Jspinner 中制作时间格式?

eclipse - 使用 gradle eclipse 插件指定 JRE Con​​tainer

java - 使用 JFileChooser 通过 Java 保存 png 图像

java - java中的一个字段被多个线程异步(不一致)访问会发生什么?

java - 使用 Jaxws 在 Soap Response 中添加额外的标签或元素

java - GUI 按钮放置

java - 如何让我的 JWindow 窗口始终保持焦点