Java 带有catch语句和崩溃的无限循环方法
我正在写一个程序来确定一次旅行的汽油里程。但是,我希望确保用户不会在提示时输入字符串或字符,并确保用户输入双精度字符。我设置了一个try/catch,就像在其他没有问题的程序中一样,但这一个给了我问题。但是程序不断循环通过该方法,然后崩溃。我试着把它放在一个while循环中,并试着把每个输入放在一个单独的try-catch中,但没有成功Java 带有catch语句和崩溃的无限循环方法,java,try-catch,Java,Try Catch,我正在写一个程序来确定一次旅行的汽油里程。但是,我希望确保用户不会在提示时输入字符串或字符,并确保用户输入双精度字符。我设置了一个try/catch,就像在其他没有问题的程序中一样,但这一个给了我问题。但是程序不断循环通过该方法,然后崩溃。我试着把它放在一个while循环中,并试着把每个输入放在一个单独的try-catch中,但没有成功 private static double[] gas(){ double gasCost[] = new double[3]; System.
private static double[] gas(){
double gasCost[] = new double[3];
System.out.println("********************************************************");
System.out.print("What is the current price of gas per gallon, ie...2.84: $");
try{
gasCost[0] = input.nextDouble();
System.out.print("On average, how many miles to the gallon does your vehicle get, ie...22.5: ");
gasCost[1] = input.nextDouble();
gasCost[2] = gasCost[0] / gasCost[1];
} catch (Exception e) {
System.out.println("\nERROR!! Invalid input, please try again!\n");
gas();
}
return gasCost;
}
为了调试的目的,将此添加到您的代码中,您将清楚地看到它一直失败的原因:
try{
//...
} catch (Exception e) {
System.err.println(e.toString()); // < added this
System.out.println("\nERROR!! Invalid input, please try again!\n");
gas();
}
你的气体法:
private static Gas gas(){
//...
return new Gas(cost, mileage);
}
确保在每次调用input.nextDouble()后调用input.nextLine(),以清除用户在键入其双精度值后输入的行尾字符。以递归方式调用此方法是一个非常糟糕的主意™. 试着在纸上仔细思考当抛出异常时会发生什么,您将立即看到原因。(或使用调试器进行尝试。)当
nextDouble()
抛出inputmaschException
时,它实际上不会超过令牌。您必须调用next()
跳过无效的输入。使用此方法可以帮助您从用户->公共静态双精度getDoubleFromUserWithPrompt(扫描仪输入,字符串提示){double val=double.NaN;boolean validDouble=false;String userInput=“”;而(!validDouble){System.out.println(提示)try{userInput=input.nextLine();val=Double.parseDouble(userInput);validDouble=true;}catch(异常e){System.out.println(“无效的双输入:”+userInput);System.out.println(“重试…”);}}返回val;}@biziclop那么你的措辞很奇怪。您实际上试图声明“那个bug是个坏主意”。“您的代码包含bug”可能更清楚。无论如何,我要删除我的评论,因为这不是建设性的。
private static Gas gas(){
//...
return new Gas(cost, mileage);
}