下面是我的代码
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"
那样的话?
2条答案
按热度按时间2nc8po8w1#
我的主要问题是,在传递“hello”时,输出是java.util.inputmismatchexception。但是在int类型中传递(2147483648)long时,输出为=java.util.inputmismatchexception:对于输入字符串:“2147483648”。我想知道为什么要打印额外的内容。
这是一个不同的问题,你最初问什么,但我会回答无论如何。
您获得“额外内容”的原因如下:
是这样打印异常:
这叫
toString()
并打印它。这个toString()
典型异常的方法大致相当于:如果不需要异常名称,只需打印异常消息:
输出:
(依我看,这不是你应该向用户展示的信息。这不能解释任何事情!)
我希望hello和2147483648的输出相同。
我想会的。对于“hello”,输出为:
最后,如果您真的想要一个可理解的错误消息,您将需要对代码进行更广泛的修改。不幸的是,两者都不是
nextInt()
或者Integer.parseInt(...)
给出异常消息,解释为什么输入字符串是不可接受的int
价值观。8oomwypt2#
价值
2147483648
大于可以放入原始java整数的最大值,即2147483647
. java整数只适合-2147483648和2147483647之间的任何值[-231到231-1,因为java int是32位整数]。要解决这个问题,可以使用整数范围内的输入,也可以使用更广泛的类型,例如long
: