Finding the appropriate Java data type

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."); } } 

Task: find a suitable data type Input Example: 5

 -150 150000 1500000000 213333333333333333333333333333333333 -100000000000000 

Output Example:

 -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 

Error 1:

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

Error 2:

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

Error 3:

 error: cannot find symbol if (bitLength <= Int.SIZE) ^ symbol: variable Int location: class Solution 
+6
source share
5 answers

Read line by line. Read the bit with BigInteger and divide it by 8 to simplify the switch case. See below code:

  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
source

Error: Illegal character: \ 8211 before each If statement

To put this symbol in you, write to us \u8211

If the operator and how will enter a number that cannot be placed in any data type?

You need to use a data type that you can place and specify.

Try this instead.

 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. 

Having made this problem, there is much more to make it work, but using BigInteger.bitLength () is a more elegant solution.

cannot find character if (bit Length <= Int.SIZE)

There is no type Int in Java, it is an Integer .

0
source

You can simply set conditions with a range of data types and check if the input number falls into which data type.

  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(); }} 
0
source
  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."); } } 
0
source
 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."); } } } } 
0
source

Source: https://habr.com/ru/post/988694/


All Articles