查找适当的Java数据类型

时间:2015-06-08 07:15:59

标签: java int byte long-integer short

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    while (input.hasNextLine()) {
        BigInteger number = new BigInteger(input.nextLine());

        int bitLength = number.bitlength();
        if (bitLength <= Bytes.SIZE)
            System.out.println("\u8211 byte");
        if (bitLength <= Short.SIZE)
            System.out.println("\u8211 short");
        if (bitLength <= Int.SIZE)
            System.out.println("\u8211 int");
        if (bitLength <= Long.SIZE)
            System.out.println("\u8211 long");

        if (bitLength > Long.SIZE)
            System.out.println(number + " can't be fitted anywhere.");
    }
} 

任务:找到合适的数据类型 样本输入:5

-150
 150000
 1500000000
 213333333333333333333333333333333333
-100000000000000

示例输出:

-150 can be fitted in:
short
int
long

150000 can be fitted in:
int
long

1500000000 can be fitted in:
int
long
213333333333333333333333333333333333 can't be fitted anywhere.

-100000000000000 can be fitted in:
long

错误1:

error: cannot find symbol
    int bitLength = number.bitlength();
                      ^

错误2:

symbol:   method bitlength()
location: variable number of type BigInteger

错误3:

error: cannot find symbol
    if (bitLength <= Int.SIZE)
                 ^
    symbol:   variable Int
    location: class Solution

5 个答案:

答案 0 :(得分:1)

逐行读取数字。使用BigInteger计数位并将其除以8,以简化switch个案例。看看下面的代码:

    Scanner input = new Scanner(new File("so/input.txt"));
    while (input.hasNextLine()) {
        BigInteger number = new BigInteger(input.nextLine().trim());
        int bitLength = number.bitLength();
        int len = bitLength / 8;
        StringBuilder output = new StringBuilder(number.toString() + " can be fitted in:\n");
        switch (len) {
            case 0:
                output.append(" byte");
            case 1:
                output.append(" short");
            case 2:
            case 3:
                output.append(" int");
            case 4:
            case 5:
            case 6:
            case 7:
                output.append(" long");
                System.out.println(output);
                break;
            default:
                System.out.println(number.toString() + "  can't be fitted anywhere.");
        }
    }

答案 1 :(得分:0)

  

错误:非法字符:\ 8211在每个If语句之前

要将此字符加入我们的代码\u8211

  

如果声明以及如何输入无法容纳在任何数据类型中的数字?

您需要使用可容纳和编号的数据类型。

试试这个。

while (input.hasNextLine()) {
    BigInteger number = new BigInteger(input.nextLine());

    int bitLength = number.bitLength() + 1;
    if (bitLength <= Bytes.SIZE)
         System.out.println(" \u8211 byte");

    if (bitLength <= Short.SIZE)
         System.out.println(" \u8211 short");

    // more checks.

    if (bitLength > Long.SIZE)
        // too big.

完成这个问题后,还有很多工作要做,但是使用BigInteger.bitLength()是更优雅的解决方案。

  

找不到符号if(bitLength&lt; = Int.SIZE)

Java中没有类型Int,它是Integer

答案 2 :(得分:0)

您可以简单地将条件与数据类型范围放在一起,并检查输入数字是否属于哪种数据类型。

    class FindDataType {
public static void main(String[] argh) {
    Scanner sc = new Scanner(System.in);
    //no. of input values
    int t = sc.nextInt();
    for (int i = 0; i < t; i++) {
        try {
            //Take input as long data type
            long x = sc.nextLong();
            System.out.println(x + " can be fitted in:");
            //Putting conditions to check the data type
            if (x >= -128 && x <= 127) {
                System.out.println("* byte");
                System.out.println("* short");
                System.out.println("* int");
                System.out.println("* long");
            } else if (x >= -32768 && x <= 32767) {
                System.out.println("* short");
                System.out.println("* int");
                System.out.println("* long");
            } else if (x >= -2147483648 && x <= 2147483647) {
                System.out.println("* int");
                System.out.println("* long");
            } else if (x >= -9223372036854775808l
                    && x <= 9223372036854775807l) {
                System.out.println("* long");
            }
        } catch (Exception e) {
            //Printing exception if no data type matches.
            System.out.println(sc.next() + " can't be fitted anywhere.");
        }

    }
    sc.close();
}}

答案 3 :(得分:0)

  int t = sc.nextInt();
  for (int i = 0; i < t; i++) {
      BigInteger x = sc.nextBigInteger();
      int bitLength = x.bitLength() + 1;
      StringBuilder output= new StringBuilder(x.toString() + " can be fitted in:\n");
      if (bitLength <= Byte.SIZE)
          output.append("* byte\n");
      if (bitLength <= Short.SIZE)
          output.append("* short\n");
      if (bitLength <= Integer.SIZE)
          output.append("* int\n");
      if (bitLength <= Long.SIZE)
          output.append("* long\n");

      if (output.subSequence(output.indexOf(":"),output.length()-1).length() >    1) {
          System.out.print(output);

      } else {
          System.out.println(x + " can't be fitted anywhere.");
      }
  }

答案 4 :(得分:0)

import java.util.*;
import java.io.*;

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 >= -(Math.pow(2, 15)) && x <= (Math.pow(2, 15) - 1)) System.out.println("* short");
            if (x >= -(Math.pow(2, 31)) && x <= (Math.pow(2, 31) - 1)) System.out.println("* int");
            if (x >= -(Math.pow(2, 63)) && x <= (Math.pow(2, 63) - 1)) System.out.println("* long");

        } catch (Exception e) {
            System.out.println(sc.next() + " can't be fitted anywhere.");
        }
    }
  }
}