是否可以为 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");
}
}
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();
}
}
}