Java 打印超出长范围的数字

Java 打印超出长范围的数字,java,Java,当我运行此代码并使用大于long范围的值时,输出为“0不能在任何地方拟合”。 我想输出: “x(我提供的输入超出了long范围)无法安装在任何位置” import java.util.*; 导入java.io.*; 类解决方案{ 公共静态void main(字符串[]argh){ 扫描仪sc=新的扫描仪(System.in); int t=sc.nextInt(); for(int i=0;i=-128&&x=-32768&&x=-2147483648&&x=-92233720368547758

当我运行此代码并使用大于long范围的值时,输出为“0不能在任何地方拟合”。 我想输出: “x(我提供的输入超出了long范围)无法安装在任何位置”

import java.util.*;
导入java.io.*;
类解决方案{
公共静态void main(字符串[]argh){
扫描仪sc=新的扫描仪(System.in);
int t=sc.nextInt();
for(int i=0;i如果(x>=-128&&x=-32768&&x=-2147483648&&x=-9223372036854775808l&&x如果数字超出
long
的范围,则不能使用
long

使用没有此类限制的类

从javadoc:

不可变任意精度整数


如果数字超出
long
的范围,则不能使用
long

使用没有此类限制的类

从javadoc:

不可变任意精度整数


BigInteger bg=新的BigInteger(“您的号码”)

参考:


祝你好运

biginger bg=newbiginger(“你的号码”)

参考:


祝您好运

正如您已经遇到的,您不能为此使用
long
。当值不能表示为
long
时,将抛出

您可以使用字符串并尝试解析它:

long x = 0;
String input = "";
try {
    input = sc.nextLine();
    x = Long.parseLong(input);
    System.out.println(x+" can be fitted in:");
    // rest of code
} catch(NumberFormatException e) {
    System.out.println(input + " can't be fitted anywhere.");
}

请注意,我更改了捕获的异常:您应该避免捕获
异常
,而更喜欢最具体的
异常

,因为您已经遇到过,您不能为此使用
long
。当值不能表示为
long
时,将抛出

您可以使用字符串并尝试解析它:

long x = 0;
String input = "";
try {
    input = sc.nextLine();
    x = Long.parseLong(input);
    System.out.println(x+" can be fitted in:");
    // rest of code
} catch(NumberFormatException e) {
    System.out.println(input + " can't be fitted anywhere.");
}
请注意,我更改了捕获的异常:您应该避免捕获
异常
,而更喜欢可以替换的最具体的
异常

} catch (Exception e) {
    System.out.println(x + " can't be fitted anywhere.");
}

next()
将以
字符串的形式获取由于异常而未被
nextLong()
检索到的令牌。

您可以替换

} catch (Exception e) {
    System.out.println(x + " can't be fitted anywhere.");
}


next()
将作为
String
获取由于异常而未被
nextLong()
检索到的令牌。

不要忘记在结尾关闭
Scanner
sc.close();
。不要忘记在结尾关闭
Scanner
sc.close()
。Florent Bayle提前感谢我希望得到与您相同的答案。但您能否具体说明这是由jvm内部完成的???当长的范围不匹配时,它将自动传输到sc.next()?如何???@RakeshYadav
sc.nextLong()
当下一个令牌不能被解析为
长的
时,将
抛出
输入不匹配异常
。在这种情况下,您将进入
catch
块。
sc.nextLong()
将读取下一个令牌(sc.nextLong()
未读取的令牌),并将其作为
字符串返回(因此它不必适合
long
,因为它是
String
)。Florent Bayle提前感谢,我希望得到与您给出的答案相同的答案。但您能否具体说明一下,它是由jvm内部完成的???当long的范围不匹配时,它将自动传输到sc。next()?如何??@RakeshYadav
sc.nextLong()
当下一个令牌不能被解析为
长的
时,将
抛出
输入不匹配异常
。在这种情况下,您将进入
catch
块。
sc.nextLong()
将读取下一个令牌(sc.nextLong()
未读取的令牌),并将其作为
字符串返回(因此它不必放入
,因为它是
字符串
)。