Java 打印超出长范围的数字
当我运行此代码并使用大于long范围的值时,输出为“0不能在任何地方拟合”。 我想输出: “x(我提供的输入超出了long范围)无法安装在任何位置”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
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()?如何???@RakeshYadavsc.nextLong()
当下一个令牌不能被解析为长的时,将抛出输入不匹配异常
。在这种情况下,您将进入catch
块。sc.nextLong()
将读取下一个令牌(sc.nextLong()
未读取的令牌),并将其作为字符串返回(因此它不必适合long
,因为它是String
)。Florent Bayle提前感谢,我希望得到与您给出的答案相同的答案。但您能否具体说明一下,它是由jvm内部完成的???当long的范围不匹配时,它将自动传输到sc。next()?如何??@RakeshYadavsc.nextLong()
当下一个令牌不能被解析为长的时,将抛出输入不匹配异常
。在这种情况下,您将进入catch
块。sc.nextLong()
将读取下一个令牌(sc.nextLong()
未读取的令牌),并将其作为字符串返回(因此它不必放入长
,因为它是字符串
)。