有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

int查找适当的Java数据类型

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) 个答案

  1. # 1 楼答案

      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.");
          }
      }
    
  2. # 2 楼答案

    逐行读数字。使用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.");
            }
        }
    
  3. # 3 楼答案

    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.");
            }
        }
      }
    }
    
  4. # 4 楼答案

    Error :illegal character: \8211 before every If statement

    要将此字符放入代码us\u8211

    If statement and how will take input of the number which can't be accommodated in any data type ?

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

    试试这个

    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()是更优雅的解决方案

    cannot find symbol if (bitLength <= Int.SIZE)

    Java中没有类型Int,它是Integer

  5. # 5 楼答案

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

        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();
    }}