遇到非常高的数字时,我的程序会抛出异常

时间:2015-02-15 13:43:04

标签: java

所以我的问题是,当我用我的4个数字编写并且它们类似于987579739 90273946 38403649 34839204739374839时,我得到了这个例外:

Exception in thread "main" java.util.InputMismatchException: For input string: "34839204739374839"
    at java.util.Scanner.nextInt(Scanner.java:2123)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at linetest2.main(linetest2.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

这是我的计划:

public class linetest {
    public static void main(String[] arg) {
        java.util.Scanner tastatur = new java.util.Scanner(System.in);

        int a, x, b, y;
        a = tastatur.nextInt();
        x = tastatur.nextInt();
        b = tastatur.nextInt();
        y = tastatur.nextInt();

        if (a * x + b == y)
            System.out.println("LINJE");
        else if (a * x + b > y)
            System.out.println("UNDER");
        else
            System.out.println("OVER");
    }
}

如何让它读取这些高数字呢?任何建议将不胜感激:)。

3 个答案:

答案 0 :(得分:0)

34839204739374839对于nextInt()而言太大了,但nextLong()应该能够阅读它。当然,您必须将nextLong()的输出存储在long变量中。

    long a, x, b, y;
    a = tastatur.nextLong();
    x = tastatur.nextLong();
    b = tastatur.nextLong();
    y = tastatur.nextLong();

这将允许您使用更大的数字,但long也有其限制。

答案 1 :(得分:0)

您为int分配一个大号,整数不能保持这个大值。

您可能希望使用long代替int,而不是使用nextLong()而不是nextInt()

答案 2 :(得分:0)

您可以通过两种方式实现:

  • 只要你的号码超出了我想要的整数范围,就读它。
  • 将其作为字符串读取,如果它更大,则将其转换为BigInteger。

您可以将字符串转换为BigInteger:

String d = tastatur.next();
BigInteger b = new BigInteger(d);

或者甚至长时间阅读

long d = tastatur.nextLong();