小编典典

如何找出哪个变量引发异常?

java

我正在编写一个程序,从账单和小费率中汇总小费和总计。

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中并打印到屏幕上。


阅读 263

收藏
2020-11-30

共1个答案

小编典典

变量不会引发异常,而是对变量赋值的右侧进行评估,因此在异常中没有任何信息可以说明将成功赋给哪个变量。

您可以考虑使用一种包含提示消息和重试的新方法:

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,您将需要一个不同的变量,但是如果您有更多的提示,从长远来看,您将可以节省。

2020-11-30