if语句在try-and-catch内部不起作用



我写了一个程序,只接受偶数,如果不是偶数,则捕获异常当我输入偶数时,代码会打印出来,但当我输入奇数时,什么也没发生

每当我尝试添加else红线覆盖整个块时

Scanner input = new Scanner (System.in);
System.out.println("Please enter number :  ");
int number = input.nextInt();

try{
if(number%2 == 0){
System.out.println(number);
}
} 
catch(Exception  e){
System.out.println("this input is not an even number");
e.printStackTrace();
}

这是一个使用Exception的奇怪地方。您可以使用Exception来表示该值为奇数,如

try {
if (number % 2 == 0) {
System.out.println(number);
} else {
throw new Exception(String.format("Input %d is not even.", number));
}
} catch (Exception e) {
System.out.println("this input is not an even number");
e.printStackTrace();
}

但是,您仍然需要else。这将是一个更适合处理奇数值的地方(不需要Exception(。比如

if (number % 2 == 0) {
System.out.println(number);
} else {
System.out.printf("this input %d is not an even number%n", number);
}

正如您所猜测的,逻辑应该在else块中,而不是catch块中:

try {
if (number % 2 == 0) {
System.out.println(number);
} else {
System.out.println("this input is not an even number");
}
} catch(Exception e) {
e.printStackTrace(); // Or some other more robust exception handling
}

您试图捕获抛出的异常。但是您应该抛出一个异常。(可能以后会发现。(

if (number % 2 != 0) {
throw new IllegalArgumentException("Not an even number: " + number);
} 
System.out.println(number);

有两种运行时异常最适合:

  • IllegalArgumentException当传递的数据错误时
  • 状态(计算(错误时的IllegalStateException

最新更新