我正在与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
的工作正常}。有人能告诉我我在这里做错了吗?
答案 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的整体解决方案更好。