2013-02-09 3 views
0

Я закончил простую программу, которая преобразует десятичное число в двоичный код (32bit). Я хотел бы реализовать некоторый тип сообщения об ошибке, если пользователь вводит номер переполнения (что-то более 2147483647). Я попробовал if_else , loop, но быстро обнаружил, что даже не могу этого сделать. Поэтому я испортил ввод ввода как строку, а затем использовал некоторые вещи, такие как .valueOF() и т. Д., И до сих пор не может найти решения.сканер.nextInt(), исключение из диапазона?

Я не вижу, как я могу сравнить любое значение с a >2147483648, если я не могу сохранить это значение в первую очередь.

Вот голый код у меня есть для метода getDecimal():

numberIn = scan.nextInt();

Edit :: Попробовав метод попробовать/поймать, впадающую ошибку компиляции из

"non-static method nextInt() cannot be referenced from a static context".

Мой код ниже.

public void getDec() 
{ 
    System.out.println("\nPlease enter the number to wish to convert: "); 

    try{ 
     numberIn = Scanner.nextInt(); 
    } 
     catch (InputMismatchException e){ 
     System.out.println("Invalid Input for a Decimal Value"); 
    } 
}  

ответ

2

Я предлагаю вам окружить это заявление с попытаться/поймать блок для NumberFormatException.

Как так:

try { 
    numberIn = Integer.valueOf(scan.next()); 
}catch(NumberFormatException ex) { 
    System.out.println("Could not parse integer or integer out of range!"); 
} 
+0

Я получаю ошибку компиляции. "Нестатический метод nextInt() не может ссылаться на статический контекст" –

+0

@StephenGilardi Я не использую nextInt в этом примере. [Здесь] (http://ideone.com/s06Q7B) - рабочий пример на идеоне.Я предполагаю, что вы вызываете это в основном, а Scanner не является статической переменной в классе? Если это переместить сканер в главном или сделать его статическим. –

+0

№. это в своем собственном классе «Десятичный». У меня есть основной класс Driver. Я посмотрю, что вы сказали за последнюю часть, но –

3

Вы можете использовать Scanner.hasNextInt() метод, который возвращает false, если следующий маркер не может быть преобразован в int. Затем в блоке else вы можете прочитать ввод как строку, используя Scanner.nextLine(), и распечатать его соответствующим сообщением об ошибке. Лично я предпочитаю этот метод:

if (scanner.hasNextInt()) { 
    a = scanner.nextInt(); 
} else { 
    // Can't read the input as int. 
    // Read it rather as String, and display the error message 
    String str = scanner.nextLine(); 
    System.out.println(String.format("Invalid input: %s cannot be converted to an int.", str)); 
} 

Другой способ добиться этого, конечно, с помощью try-catch блока. Scanner#nextInt() метод выбрасывает InputMismatchException, когда он не может преобразовать данный вход в integer. Таким образом, вам просто нужно обрабатывать InputMismatchException: -

try { 
    int a = scan.nextInt(); 
} catch (InputMismatchException e) { 
    System.out.println("Invalid argument for an int"); 
} 
+0

+1 хорошее решение, можно ли что-нибудь сделать, кроме 'try-catch'? –

+0

@Quoi .. Просто обновил ответ. –

+1

Спасибо за быстрый ответ! Сначала я решил попробовать .hasnextInt(), но столкнулся с «нестационарным методом, на который нельзя ссылаться из статической» контекстной ошибки. –

0

использование exceptions .. всякий раз, когда число вводится больше, чем его емкость хранения, то будет сгенерировано исключение

См docs.oracle.com/javase/tutorial/essential/exceptions/

0

Вы можете использовать метод hasNextInt(), чтобы убедиться, что существует целое число, готовое для чтения.

0

попробовать это:

long num=(long)scan.nextLong(); 
    if (num > Integer.MAX_VALUE){ 
    print error. 
    } 
else 
int x=(int)num; 

или попытаться поймать:

try{ 
    int number=scan.nextInt() 
    } 
}catch(Exception ex){ 
    print the error 
    } 
+1

не может этого сделать .. как и раньше, принимая во внимание, компилятор будет кричать .. – asifsid88

+1

Это никогда не сработает. scan.nextInt() возвращает int, он никогда не будет больше MAX_VALUE –

+0

@ asifsid88 yep right. изм. – Arpit

Смежные вопросы