2015-09-25 3 views
1

Когда я запускаю этот код и использую значение, большее длинного диапазона, тогда выход «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++) { 
      long x = 0; 
      try { 
       x = sc.nextLong(); 
       System.out.println(x + " can be fitted in:"); 
       if (x >= -128 && x <= 127) 
        System.out.println("* byte"); 
       if (x >= -32768 && x <= 32767) 
        System.out.println("* short"); 
       if (x >= -2147483648 && x <= 2147483647) 
        System.out.println("* int"); 
       if (x >= -9223372036854775808l && x <= 9223372036854775807l) 
        System.out.println("* long"); 

       // Complete the code 
      } catch (Exception e) { 
       System.out.println(x + " can't be fitted anywhere."); 
      } 

     } 
    } 
} 
+0

Не забудьте закрыть свой «Сканер» в конце: 'sc.close();'. –

ответ

1

Вы можете заменить

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

по

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

next() получит как String маркер, который не был получен с помощью nextLong() из-за исключения.

+0

Florent Bayle спасибо заранее, я хочу, чтобы тот же ответ вы дали. Но вы можете быть конкретным, это делается внутри jvm ???, когда диапазон длинного не согласован, тогда он автоматически будет передан sc.next ()??как?? –

+0

@RakeshYadav 'sc.nextLong()' будет 'бросать'' InputMismatchException', когда следующий токен не может быть проанализирован как 'long'. Когда это произойдет, вы войдете в блок 'catch'. 'sc.next()' будет читать следующий токен (тот, который не был прочитан 'sc.nextLong()') и вернуть его как 'String' (поэтому ему не нужно вписываться в' long ', поскольку это' String'). –

2

Если число находится вне диапазона long вы можете Не используйте long.

Используйте класс BigInteger, который не имеет такого ограничения.

От Javadoc:

Неизменное произвольной точности целые

1

Как вы уже встречались, вы не можете использовать long для этого. Scanner.nextLong() будет вызывать InputMismatchException, когда значение не может быть представлено как long.

Вы можете использовать строку и попытаться разобрать его:

long x = 0; 
String input = ""; 
try { 
    input = sc.nextLine(); 
    x = Long.parseLong(input); 
    System.out.println(x+" can be fitted in:"); 
    // rest of code 
} catch(NumberFormatException e) { 
    System.out.println(input + " can't be fitted anywhere."); 
} 

Обратите внимание, что я изменил перехваченное исключение: вы должны избегать ловель Exception и предпочитаете наиболее специфичный Exception.