无法证明-100000000000000资格作为长输入

问题描述 投票:0回答:1

我已经写了一个程序,以确定任何输入是否适合各种数据类型Java中的范围,如果它的打印符合条件的数据类型。

该程序首先将一个整数输入以确定用于我要测试的资格总常数。然后运行一个循环所需数量的查询所决定的,检查合格的每个常量ENTERED倍。

我现在面临的问题是that--我检查单个输入的资格,但是当我进入“-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.");
        }
    }
}
}
java java.util.scanner long-integer
1个回答
2
投票

我看到你的代码,你试图解析pow(-2.00,63.00)到一个整数,将不会返回你期望的值。

你可以只替换长数据类型检查你这样的铸造:

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”分别。这同样适用于其他数据类型(字节,短,整型)。

© www.soinside.com 2019 - 2024. All rights reserved.