我正在尝试编写简单的计算器并实现一些异常。如果客户端尝试输入字母而不是数字,我想捕获异常InputMisMatchException。我已经导入了java.util.Input ...,但这仍然无法正常工作,并且结束了程序。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Calculator {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
boolean menu = true;
int choice;
while (menu) {
menuCalculator();
System.out.println();
System.out.println("Select operation: ");
choice = sc.nextInt();
sc.nextLine();
switch (choice) {
case 1:
try{
division();
} catch (InputMismatchException e){
System.err.println("Wrong input. Please enter valid value(s).");
}
break;
case 5:
System.out.println("Shutting down calculator");
menu = false;
break;
}
}
}
public static void menuCalculator() {
System.out.println("Press to go: \n 1. to divide \n 2. to multiplicate \n 3. to sum \n 4. to substract \n 5. to quit");
}
public static void division() {
double firstNo;
double secondNo;
double result;
System.out.println("Enter first number:");
firstNo = sc.nextDouble();
sc.nextLine();
System.out.println("Enter second number:");
secondNo = sc.nextDouble();
sc.nextLine();
result = firstNo / secondNo;
if (secondNo == 0) {
System.out.println("Cannot divide by 0");
} else {
System.out.println(firstNo + " / " + secondNo + " = " + result);
}
}
}
答案 0 :(得分:1)
nextInt
引发了异常,但是您对try
的调用没有catch
/ nextInt
,因此不会被捕获。移动您的try
/ catch
块,以使nextInt
调用位于其中。 (您正在处理来自division
的{{1}}的错误,而不是来自nextDouble
的错误。)
但是:您可以考虑主动调用nextInt
,而不是被动地处理异常。两种方法各有利弊。
这是将hasNextInt
与循环一起使用的方式:
hasNextInt
或者也可以处理范围检查,例如:
System.out.println("Select operation (1 - 5): ");
while (!sc.hasNextInt()) {
sc.nextLine();
System.out.println("Please entire a number [1 - 5]:");
}
choice = sc.nextInt();
sc.nextLine();
switch (choice) {
// ...
答案 1 :(得分:0)
如果要捕获异常,则必须将接受扫描程序输入的代码括起来。您将try-catch块放错了位置,那么它将起作用。