Java 我的程序遇到非常高的数字时抛出异常
所以我的问题是,当我写4个数字时,它们类似于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
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
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分钟才能这样做