如何在Java中创建多个自定义InputMismatch异常消息?

问题描述 投票:0回答:1

是否可以为 1 个 try-catch 块内的每个变量 num、price 和 item 提供自定义异常消息,或者我是否需要多个 try 和 catch 块?因此,如果用户为“num”变量输入字母而不是整数,则异常消息将是“必须是 1-10 之间的整数”。如果用户输入字母而不是双精度数作为“价格”变量,则异常消息将是“必须是 0.00-100.00 之间的双精度数”。

public static void main(String[] args) throws Exception {
     Scanner scan = new Scanner(System.in);
            int num;
            double price
            String item;
    
     try {
            System.out.println("Input must be an integer between 1-10");
            num = scan.nextInt();
            System.out.println("Input must be a double between 0.00-100.00");
            price = scan.nextDouble();
            System.out.println("Input must be a string");
            item = scan.next();
                
     } catch(InputMismatchException e) {
            System.out.println("Custom Message Here");    

     }
}
java java.util.scanner
1个回答
0
投票

catch
块中的代码与任何其他类型的[代码]块中的[Java]代码没有什么不同。
我建议初始化变量
num
price
(为无效值)并在
if
块中使用
catch
语句。
如果变量(即
num
price
)具有初始值,则意味着用户输入该变量的值时发生错误。
由于
num
price
的有效值范围都是非负数,因此在下面的代码中我将它们都初始化为 -1(减一)。

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int num = -1;
    double price = -1.0;
    String item = null;
    try {
        System.out.println("Input must be an integer between 1-10");
        num = scan.nextInt();
        System.out.println("Input must be a double between 0.00-100.00");
        price = scan.nextDouble();
        scan.nextLine();
        System.out.println("Input must be a string");
        item = scan.nextLine();
    }
    catch(InputMismatchException e) {
        if (num < 0) {
            System.out.println("Invalid 'num'.");
        }
        else if (price < 0.0D) {
            System.out.println("Invalid 'price'.");
        }
        else {
            e.printStackTrace();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.