无法证明 -100000000000000 符合长输入的条件

Unable to prove -100000000000000 eligible as an long input

我编写了一个程序来确定任何输入是否符合 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) 解析为一个整数,这不会 return 您期望的值。

您可以像这样替换 Long 数据类型检查中的转换:

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) and pow(2.00,63.00)-1"。其他数据类型(字节、短整型、整数)也是如此。