怀疑长型检测

时间:2015-07-30 17:30:52

标签: java

此代码检测您可以使用哪种数据类型来存储从用户获得的数字。如果有多个合适的数据类型,则列出所有内容。

但是,代码无法满足正确执行-100000000000000(应该很长)

import java.util.Scanner;
import java.lang.Exception;
import java.math.BigInteger;
import java.util.InputMismatchException;

public class Mainn
{
    public static void main(String args[])
    {
        Scanner console = new Scanner(System.in);
        int size = console.nextInt();
        BigInteger numbers[] = new BigInteger[size];
        BigInteger Long = new BigInteger("9223372036854775808");
        BigInteger Int = new BigInteger("4294967295");
        for(int i=0;i<size;i++)
        {
            numbers[i]=console.nextBigInteger();
        }
        for(int i=0;i<size;i++)
        {
            System.out.print(numbers[i]);
                if(numbers[i].compareTo(BigInteger.valueOf(-65536)) > 0 && numbers[i].compareTo(BigInteger.valueOf(65535))<0)
                    System.out.printf(" can be fitted in:\n* short\n* int\n* long\n");
                else if(numbers[i].compareTo(Int.negate()) > 0 && numbers[i].compareTo(Int.subtract(BigInteger.valueOf(1)))<0)
                    System.out.printf(" can be fitted in:\n* int\n* long\n");
                else if(numbers[i].compareTo(Long.negate()) > 0 && numbers[i].compareTo(Long.subtract(BigInteger.valueOf(1)))<0)
                    System.out.printf(" can be fitted in:\n* long\n");
                else
                    System.out.print(" can't be fitted anywhere.");
        }
    }
}

1 个答案:

答案 0 :(得分:6)

您的Long初始化为2 ^ 32-1,这不符合您的示例编号,而Long.MAX_VALUE的值为2 ^ 63-1。

同样命名变量Long是一个非常糟糕的主意。它会影响作为JDK标准部分的类Long,它违反了conventions,它建议使用类似variableName的内容。