java.util.inputmismatchexception:对于输入字符串:“2147483648”

gudnpqoy  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(394)

下面是我的代码

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" 那样的话?

2nc8po8w

2nc8po8w1#

我的主要问题是,在传递“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"

(依我看,这不是你应该向用户展示的信息。这不能解释任何事情!)
我希望hello和2147483648的输出相同。
我想会的。对于“hello”,输出为:

java.util.InputMismatchException: For input string: "Hello"

最后,如果您真的想要一个可理解的错误消息,您将需要对代码进行更广泛的修改。不幸的是,两者都不是 nextInt() 或者 Integer.parseInt(...) 给出异常消息,解释为什么输入字符串是不可接受的 int 价值观。

8oomwypt

8oomwypt2#

价值 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) { }

相关问题