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

Java 我的程序遇到非常高的数字时抛出异常,java,Java,所以我的问题是,当我写4个数字时,它们类似于987579739 90273946 38403649 348392047339374839,那么我得到了这个异常: Exception in thread "main" java.util.InputMismatchException: For input string: "34839204739374839" at java.util.Scanner.nextInt(Scanner.java:2123) at java.util.S

所以我的问题是,当我写4个数字时,它们类似于
987579739 90273946 38403649 348392047339374839
,那么我得到了这个异常:

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");
    }
}

我该怎么做才能让它读取这些高数字?任何建议都将不胜感激:)。
348392047339374839
对于
nextInt()
来说太大了,但是
nextLong()
应该能够阅读它。当然,您必须将
nextLong()
的输出存储在
long
变量中

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

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

如果将一个大数字分配给
int
,整数就不能容纳这么大的值


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

您可以通过两种方式完成:

  • 只要你的数字超出我喜欢的整数范围,就可以阅读
  • 将其读取为字符串,如果它更大,则将其转换为BigInteger
要将字符串转换为BigInteger,可以执行以下操作:

String d = tastatur.next();
BigInteger b = new BigInteger(d);
甚至把它读得很长

long d = tastatur.nextLong();

将其作为字符串阅读并使用biginger/long类。因此,我按照您所说的做了如下操作:公共类linetest{public static void main(string[]arg){java.util.Scanner tastatur=new java.util.Scanner(System.in);long a,x,b,y;a=tastatur.nextLong();x=tastatur.nextLong();b=tastatur.nextLong();y=tastatur.nextLong();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分钟才能这样做