我正在与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
。它可以很好地检查我是否输入了不能解析为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命名约定。