InputMismatchException 根本没有被捕获
InputMismatchException not being caught at all
我正在尝试制作一个计算器,人们可以根据数字做出不同的选择。
当我输入一个不是 int 的选择时,它会抛出 InputMismatchException,但由于某种原因它不会被捕获。
这是我目前的代码:
import java.util.*;
public class calculator {
public static void main(String[] args) {
boolean run = true;
Scanner in = new Scanner(System.in);
int choice;
while (run) {
System.out.println("Bem-vindo a calculadora! Escolha uma das opções abaixo!");
System.out.println("1. Conversor binario");
System.out.println("2. Conversor octal");
System.out.println("3. Conversor decimal");
System.out.println("4. Conversor hexadecimal");
System.out.println("5. Calculadora de binario");
System.out.println("6. Calculadora de octal");
System.out.println("7. Calculadora normal");
System.out.println("8. Calculadora de hexadecimal");
System.out.println("9. Sair");
try {
System.out.println("Enter a number");
choice = in.nextInt();
} catch (Exception e) {
System.out.println("Please put in a Valid Number");
choice = 0;
choice = in.nextInt();
}
switch (choice) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
run = false;
break;
default:
System.out.println("Input incorreto. Tente novamente.");
choice = in.nextInt();
break;
}
}
}
}
请考虑这个解决方案:
将Scanner in
设置为class字段,
移动启动信息输出并将服务切换到另一个方法(没有任何循环),该方法会抛出 InputMismatchException,例如:
public class Calculator {
static Scanner in = new Scanner(System.in);
private static void calc() throws InputMismatchException {
int choice = 0;
System.out.println("Bem-vindo a calculadora! Escolha uma das opções abaixo!");
...
System.out.println("Enter a number");
choice = in.nextInt();
switch (choice) {
case 1:
System.out.println("entered=" + choice);
break;
...
default:
System.out.println("Input incorreto. Tente novamente.");
break;
}
}
和 运行 它在循环中使用 try - catch 语句,例如:
public static void main(String[] args) {
boolean ok = true;
while (ok) {
try {
calc();
ok = false;
} catch (InputMismatchException e) {
System.out.println("InputMismatchException " + e.getMessage());
in.nextLine();
}
}
in.close();
}
-- 编辑--
但当然可以在 calc()
方法中忽略抛出 InputMismatchException,因为它是未经检查的异常
我正在尝试制作一个计算器,人们可以根据数字做出不同的选择。
当我输入一个不是 int 的选择时,它会抛出 InputMismatchException,但由于某种原因它不会被捕获。
这是我目前的代码:
import java.util.*;
public class calculator {
public static void main(String[] args) {
boolean run = true;
Scanner in = new Scanner(System.in);
int choice;
while (run) {
System.out.println("Bem-vindo a calculadora! Escolha uma das opções abaixo!");
System.out.println("1. Conversor binario");
System.out.println("2. Conversor octal");
System.out.println("3. Conversor decimal");
System.out.println("4. Conversor hexadecimal");
System.out.println("5. Calculadora de binario");
System.out.println("6. Calculadora de octal");
System.out.println("7. Calculadora normal");
System.out.println("8. Calculadora de hexadecimal");
System.out.println("9. Sair");
try {
System.out.println("Enter a number");
choice = in.nextInt();
} catch (Exception e) {
System.out.println("Please put in a Valid Number");
choice = 0;
choice = in.nextInt();
}
switch (choice) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
run = false;
break;
default:
System.out.println("Input incorreto. Tente novamente.");
choice = in.nextInt();
break;
}
}
}
}
请考虑这个解决方案:
将Scanner in
设置为class字段,
移动启动信息输出并将服务切换到另一个方法(没有任何循环),该方法会抛出 InputMismatchException,例如:
public class Calculator {
static Scanner in = new Scanner(System.in);
private static void calc() throws InputMismatchException {
int choice = 0;
System.out.println("Bem-vindo a calculadora! Escolha uma das opções abaixo!");
...
System.out.println("Enter a number");
choice = in.nextInt();
switch (choice) {
case 1:
System.out.println("entered=" + choice);
break;
...
default:
System.out.println("Input incorreto. Tente novamente.");
break;
}
}
和 运行 它在循环中使用 try - catch 语句,例如:
public static void main(String[] args) {
boolean ok = true;
while (ok) {
try {
calc();
ok = false;
} catch (InputMismatchException e) {
System.out.println("InputMismatchException " + e.getMessage());
in.nextLine();
}
}
in.close();
}
-- 编辑--
但当然可以在 calc()
方法中忽略抛出 InputMismatchException,因为它是未经检查的异常