java - 无法证明 -100000000000000 适合作为长输入

标签 java java.util.scanner long-integer

我编写了一个程序来确定任何输入是否适合 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/

相关文章:

java - Swagger ui 显示重复的模型变量

java - 如何在java中读取这些特定行

java - 从 CSV 读取长数据

C 中无符号长二维数组转换为无符号一维字符数组

java - Java 中将 double 舍入为 long

java - Android:单击提交按钮后将 'waiting' 字符串数据发送到数据库

java - 为什么为一个目的创建 HandlerThread : to pass it's Looper to a new Handler

java - 如何检查响应是否为 xml 格式而不是 HTML?

java - 如何在java中清除控制台

java - 扫描仪跳过文本文件中的行并且不打印前导空格