下面是我的代码
public class ExceptionHandling {
public static void main(String[] args) throws InputMismatchException{
Scanner sc = new Scanner(System.in);
int a = 0;
int b = 0;
try {
a = sc.nextInt();
b = sc.nextInt();
try {
int c = a / b;
System.out.println(b);
} catch (ArithmeticException e) {
System.out.println(e);
}
} catch (InputMismatchException e) {
System.out.println(e);
}
}
}
我对上述问题的主要查询是,当我传递字符串作为输入时,我只会得到
java.util.InputMismatchException
。
但是当我传递 2147483648 作为输入时,它会给出 java.util.InputMismatchException: For input string: "2147483648"
作为输出。
那么谁能告诉我为什么在这种情况下我会得到
For input string: "2147483648"
?
我的主要问题是,在传递“hello”时,输出是 java.util.InputMismatchException。但是,在 int 类型中传递 (2147483648) long 时,输出为= java.util.InputMismatchException: 对于输入字符串:“2147483648”。我想知道为什么它会打印额外的内容。
这与您最初问的问题不同,但无论如何我都会回答。
您获得“额外内容”的原因如下:
java.util.InputMismatchException: For input string: "2147483648"
您正在打印这样的异常:
System.out.println(e);
这会在异常对象上调用
toString()
并打印它。典型异常的 toString()
方法大致相当于:
public String toString() {
return e.getClass().getName() + ": " + e.getMessage();
}
如果不需要异常名称,只需打印异常消息:
System.out.println(e.getMessage());
它将输出:
For input string: "2147483648"
(IMO,这不是您应该向用户显示的消息。它不能解释任何事情!)
我希望 Hello 和 2147483648 的输出相同。
我想,会的。对于“Hello”,输出将是:
java.util.InputMismatchException: For input string: "Hello"
最后,如果您确实想要一个易于理解的错误消息,则需要对代码进行更广泛的修改。不幸的是,
nextInt()
或Integer.parseInt(...)
都没有给出异常消息来解释为什么输入字符串不是可接受的int
值。
值
2147483648
大于可容纳原始Java整数的最大值,即2147483647
。 Java 整数仅适合 -2147483648 和 2147483647 之间的任何值 [-231 到 231-1,因为 java int 是 32 位整数]。要解决此问题,请使用整数范围内的输入,或者使用更广泛的类型,例如 long
:
long a = 0;
long b = 0;
try {
a = sc.nextLong();
b = sc.nextLong();
// ...
}
catch (Exception e) { }
//Instead of this :
catch(InputMismatchException e)
{
System.out.println(e);
}
//use this:
catch(InputMismatchException e)
{
System.out.println("java.util.InputMismatchException");
}