如果NumberFormatException
从字符串(由用户提供)解析双精度时抛出 a,我该如何重试?
String input = JOptionPane.showInputDialog(null, message + count);
double inputInteger = Double.parseDouble(input);
如果NumberFormatException
从字符串(由用户提供)解析双精度时抛出 a,我该如何重试?
String input = JOptionPane.showInputDialog(null, message + count);
double inputInteger = Double.parseDouble(input);
在这种情况下,您可以使用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);
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;
}
}
您需要将代码包装在 try catch 中并处理异常以执行您想要的任何操作。这样做:
try {
inputInteger = Double.parseDouble(input);
}catch(NumberFormatException nfe) {
// Go to take input again
}
您可以通过在 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 循环,因为这减少了内存开销。