取消对话框时不要抛出IllegalArgument异常

时间:2018-09-28 15:01:10

标签: java exception int illegalargumentexception

我正在开发一个涉及博彩的游戏,该游戏不允许用户输入负数或大于其余额的数字:代码:

    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。我如何在保持功能的同时规避此问题? >

2 个答案:

答案 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
}