0

如果NumberFormatException从字符串(由用户提供)解析双精度时抛出 a,我该如何重试?

String input = JOptionPane.showInputDialog(null, message + count);
double inputInteger = Double.parseDouble(input);
4

4 回答 4

0

在这种情况下,您可以使用do-while循环重复这些事情,并在满足所有条件时使布尔变量为 false。

这是一个例子:

    boolean isFailure=true;
     do{
        try{
            input = JOptionPane.showInputDialog(null, message + count);
            // do whatever you want....here...
            isFailure=false;

       }catch(NumerFormatException e){
            //log the exception and report the error
            JOptionPane.showMessageDialog(null,"Invalid Input! Try again!", "Error", 
 JOptionPane.ERROR_MESSAGE); 

         }

         }while(isFailure);
于 2013-06-16T12:50:10.393 回答
0
inputInteger = null;

while(inputInteger == null)
{
    input = JOptionPane.showInputDialog(null, message + count);
    try
    {
        if (isValidGrade(input, maxPoints))
            inputInteger = Double.parseDouble(input);
    }
    catch(NumberFormatException e)
    {
        // Show your error here
        inputInteger = null;
    }
}
于 2013-06-16T12:29:08.627 回答
0

您需要将代码包装在 try catch 中并处理异常以执行您想要的任何操作。这样做:

       try {
                inputInteger = Double.parseDouble(input);
       }catch(NumberFormatException nfe) {
           // Go to take input again
       }
于 2013-06-16T12:29:12.020 回答
0

您可以通过在 catch 块中递归调用该方法来做到这一点。例如:

public void yourMethod() {
     try {
          input = JOptionPane.showInputDialog(null, message + count);
          if (isValidGrade(input, maxPoints)){
          inputInteger = Double.parseDouble(input);
    } catch (NumberFormatException e) {
          this.yourMethod();
    }
}

这不是一个有效的代码,但在你的代码中使用这个概念。使用 while 循环也是另一种选择。但我更喜欢这种方法而不是 while 循环,因为这减少了内存开销。

于 2013-06-16T12:43:16.000 回答