为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2022-06-04 10:40:03
我编写了一个程序来确定任何输入是否适合 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.");        }    }}}
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我在您的代码中看到您正在尝试解析pow(-2.00,63.00)为整数,它不会返回您期望的值。


您可以像这样在 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) 和 pow(2.00,63.00)-1”。其他数据类型(Byte、Short、Integer)也是如此。


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信