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

问题描述 投票:0回答:3

下面是我的代码

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"

java exception try-catch inputmismatchexception
3个回答
1
投票

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


1
投票

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

0
投票
//Instead of this :
 catch(InputMismatchException e)
        {
           System.out.println(e);
        }
//use this:
 catch(InputMismatchException e)
        {
           System.out.println("java.util.InputMismatchException");
        }
© www.soinside.com 2019 - 2024. All rights reserved.