2016-01-26 6 views
0

Я пытался написать программу, которая запрашивает у пользователя чтение двух целых чисел и отображает их сумму, и моя программа должна попросить пользователя прочитать номер снова, если вход неверен. Вот что я придумал:Не удается ввести NumberFormatException

import java.util.*; 
public class NumFormatException { 

    public static void main(String[] args) throws NumberFormatException { 
     Scanner input=new Scanner(System.in); 
     System.out.println("Enter 2 integers: "); 
     int num1=0; 
     int num2=0; 


      boolean isValid = false; 

      while (!isValid) { 
      try 
      { 
       num1=input.nextInt(); 
       num2=input.nextInt(); 
       isValid=true; 
      } 
      catch(NumberFormatException ex) 
      { 
       System.out.println("Invalid input"); 
      } 
     } 
      System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); 
    } 

} 

Моя главная цель состоит в том, чтобы поставить пользователя в ситуации повторно ввести целое число, если вход неправильно. Когда я ввожу два целых числа, работа работает хорошо, но моя проблема связана с исключением: когда я ввожу, например, a вместо целого числа, моя программа разбилась.

+0

его '' InputMismatchException' не NumberFormatException'. Поскольку вы не конвертируете 'string' в' int' здесь. – Satya

+0

@Satya Когда я помещаю InputMismatchException вместо numberFormatException, программа печатает «Invalid Input» бесконечное время! –

ответ

2

Здесь есть две проблемы. Во-первых, если метод nextXYZScanner встречает неправильный ввод, он не будет выбрасывать, а не InputMismatchException. Во-вторых, если такое исключение, маркер ввода не будет израсходован, так что вы должны потреблять его явно снова:

try { 
    num1=input.nextInt(); 
    num2=input.nextInt(); 
    isValid=true; 
} catch (InputMismatchException ex) { // catch the right exception 
    System.out.println("Invalid input"); 
    // consume the previous, erroneous, input token(s) 
    input.nextLine(); 
} 
+0

nextInt() not nextLine() правильно? –

+0

Его правильная 'input.nextLine();' – Satya

+0

@Satya Why nextLine() ??? –

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