我正在编写一个程序,从账单和小费率中汇总小费和总计。
public void takeUserInput() { Scanner sc = new Scanner(System.in); double billAmount; int tipRate; try { System.out.print("What is the bill? "); billAmount = sc.nextDouble(); System.out.print("What is the tip percentage? "); tipRate = sc.nextInt(); tc.calculate(billAmount, tipRate); } catch (InputMismatchException e1) { String errorMessage = "Please enter a valid number for the "; // errorMessage += billAmount or // errorMessage += tipRate ? }
我正在寻找一种找出哪个变量引发InputMismatchException的方法,因此可以将哪个变量名称添加到变量errorMessage中并打印到屏幕上。
变量不会引发异常,而是对变量赋值的右侧进行评估,因此在异常中没有任何信息可以说明将成功赋给哪个变量。
您可以考虑使用一种包含提示消息和重试的新方法:
billAmount = doubleFromUser(sc, "What is the bill? ", "bill");
哪里doubleFromUser是:
doubleFromUser
static double doubleFromUser(Scanner sc, String prompt, String description){ while(true) { //until there is a successful input try { System.out.print(prompt); //move to before the loop if you do not want this repeated return sc.nextDouble(); } catch (InputMismatchException e1) { System.out.println("Please enter a valid number for the " + description); } } }
对于int和double,您将需要一个不同的变量,但是如果您有更多的提示,从长远来看,您将可以节省。