我正在开发一个涉及博彩的游戏,该游戏不允许用户输入负数或大于其余额的数字:代码:
int bet = 0;
boolean cont = true;
int userBalance = 100; // Keeps receiving input until an integer is entered.
do {
try {
bet = Integer.parseInt(JOptionPane.showInputDialog("Please enter a bet: "));
// Not allowing user to enter negative number
if (bet < 0) {
throw new IllegalArgumentException("");
}
if (bet > userBalance) {
throw new BetTooHighException();
}
// Breaks loop if nothing is thrown
cont = false;
// Catching negative numbers } catch (IllegalArgumentException ilArgException) {
JOptionPane.showMessageDialog(null, "bet must be a positive integer!");
} catch (BetTooHighException betTooHigh) {
JOptionPane.showMessageDialog(null, "You cannot bet more than you have.");
}
} while (cont);
System.out.println(bet);
此代码几乎可以正常工作,但是,如果我在对话框上单击“取消”而不输入任何内容,则将bet设置为0,则抛出了llegalArgumentException。我如何在保持功能的同时规避此问题? >
答案 0 :(得分:0)
您正试图将您从inputDialog获得的响应解析为引发IllegalArgumentException的Integer
提取
JOptionPane.showInputDialog("Please enter a bet: ")
对于可以检查其是否为空的对象。如果不是,请继续您的下注流程。
我不知道取消的JOptionPane.showInputDialog的确切返回值,但它可能为空
答案 1 :(得分:0)
按如下所示创建输入对话框时,可以使用0
作为默认值:
JOptionPane.showInputDialog("Please enter a bet: ", 0)
但是,即使使用默认值,如果用户单击“取消”按钮,此方法也将返回null。因此,Integer.parseInt()
将抛出IllegalArgumentException
。
所以你可以做
ret = JOptionPane.showInputDialog("Please enter a bet: ", 0)
if (ret == null) {
cont = false;
} else {
bet = Integer.parseInt(ret);
// rest of your logic
}