我编写了一个程序来确定任何输入是否适合 java 中各种数据类型的范围,以及是否打印符合条件的数据类型。
程序首先采用整数输入来确定总常量,其中 我想测试一下是否有资格。然后,它按照查询确定的所需次数运行循环,以检查输入的每个常量的资格。
我面临的问题是——我正在检查单个输入的资格,但是当我输入“-100000000000000”(-1后跟14个零)时,没有输出,光标接受输入并然后就无限期地眨眼。
任何其他常量输入都会给出所需的输出,但程序的问题仅在我输入“-100000000000000”后才会发生。很长一段时间以来,我一直在尝试自己解决这个问题,因此任何线索都会对我有所帮助。
这是我的代码 -->
import java.util.*;
import java.io.*;
import static java.lang.Math.pow;
class Solution{
public static void main(String []argh)
{
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
for(int i=0;i<t;i++)
{
try
{
long x=sc.nextLong();
System.out.println(x+" can be fitted in:");
if(x>=-128 && x<=127){
System.out.println("* byte");
}
if(x>=(int)(pow(-2.00,15.00)) && x<=(int)(pow(2.00,15.00)-1)){
System.out.println("* short");
}
if(x>=(int)(pow(-2.00,31.00)) && x<=(int)(pow(2.00,31.00)-1)){
System.out.println("* int");
}
if(x>=(int)(pow(-2.00,63.00)) && x<=(int)(pow(2.00,63.00)-1)){
System.out.println("* long");
}
}
catch(Exception e)
{
System.out.println(sc.next()+" can't be fitted anywhere.");
}
}
}
}
最佳答案
我在您的代码中看到您正在尝试将 pow(-2.00,63.00)
解析为 Integer,这不会返回您期望的值。
您可以在长数据类型检查中替换您的转换,如下所示:
if(x>=(long)(pow(-2.00,63.00)) && x<=(long)(pow(2.00,63.00)-1)){
System.out.println("* long");
}
此外,以防万一您不知道,您可以简单地分别使用“Long.MIN_VALUE | Long.MAX_VALUE”而不是“pow(-2.00,63.00) 和 pow(2.00,63.00)-1”。其他数据类型(字节、短整型、整数)也是如此。
关于java - 无法证明 -100000000000000 适合作为长输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54500956/