我正在开发一款 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/