我正在编写一个程序,用于计算提单和提示率的小费和总数。
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中并打印到屏幕上。
答案 0 :(得分:1)
有各种简单的方法可以实现目标:
billAmountIsValid
。最初该变量为false,在调用nextDouble()之后将其变为true。然后,您可以轻松检查您的try块是否有有效的billAmount。经过一番思考:你真的想要1 + 2的组合:你看;当用户输入正确的billAmount时;当第二个值给出错误的第二个值时,为什么要忘记关于该值?不 - 您应该为每个变量循环,直到您收到有效输入。然后才开始要求下一个值!
答案 1 :(得分:0)
变量不抛出异常,对变量赋值的右侧进行评估,因此异常中没有信息说明它要分配哪个变量使其成功。 / p>
您可以考虑的是一种包含提示消息和重试的新方法:
billAmount = doubleFromUser(sc, "What is the bill? ", "bill");
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,但是如果你有更多的提示,你将从长远来看保存。