当前位置: 代码迷 >> java >> 长类型检测的怀疑
  详细解决方案

长类型检测的怀疑

热度:119   发布时间:2023-07-17 21:08:22.0

此代码检测可用于存储从用户那里获得的数字的数据类型。 如果有多个合适的数据类型,则列出所有内容。

但是,代码无法满足正确执行-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.");
        }
    }
}

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

也给变量Long命名是一个很糟糕的主意。 它遮盖了类,而类是JDK的标准部分,并且违反了 ,建议使用诸如variableName类的 。

  相关解决方案