2013-10-02 2 views
3

Я новичок в Java, и я хотел продолжать запрашивать ввод пользователя, пока пользователь не введет целое число, так что исключений InputMismatchException нет. Я пробовал этот код, но я все еще получаю исключение, когда я ввожу нецелое значение.Как подключить пользовательский ввод до ввода целого числа?

int getInt(String prompt){ 
     System.out.print(prompt); 
     Scanner sc = new Scanner(System.in); 
     while(!sc.hasNextInt()){ 
      System.out.println("Enter a whole number."); 
      sc.nextInt(); 
     } 
     return sc.nextInt(); 
} 

Спасибо за ваше время!

ответ

3

Работа над кодом Juned, я был в состоянии сделать его короче.

int getInt(String prompt) { 
    System.out.print(prompt); 
    while(true){ 
     try { 
      return Integer.parseInt(new Scanner(System.in).next()); 
     } catch(NumberFormatException ne) { 
      System.out.print("That's not a whole number.\n"+prompt); 
     } 
    } 
} 
+0

спасибо за помощь, Счастливое кодирование –

9

Выполните ввод с использованием next вместо nextInt. Поместите пробную попытку для анализа ввода с использованием метода parseInt. Если синтаксический анализ успешно завершит цикл while, в противном случае продолжить. Попробуйте это:

 System.out.print("input"); 
     Scanner sc = new Scanner(System.in); 
     while (true) { 
      System.out.println("Enter a whole number."); 
      String input = sc.next(); 
      int intInputValue = 0; 
      try { 
       intInputValue = Integer.parseInt(input); 
       System.out.println("Correct input, exit"); 
       break; 
      } catch (NumberFormatException ne) { 
       System.out.println("Input is not a number, continue"); 
      } 
     } 
+0

Спасибо! Мне было интересно, есть ли более короткий путь, чем это? – Shail

+0

@Shail Там могут быть лучшие решения, но это тот, который я могу создать, используя мои ограниченные возможности. Примите ответ, если он поможет. Благодаря! –

+0

Спасибо. Это сработало для меня. –

0

В качестве альтернативы, если это только одна цифра целое [0-9], то вы можете проверить его ASCII-код. Это должно быть от 48 до 57, чтобы быть целым числом.

Построение на коде Juned, вы можете заменить попробовать блок с условием, если:

System.out.print("input"); 
    Scanner sc = new Scanner(System.in); 
    while (true) { 
      System.out.println("Enter a whole number."); 
      String input = sc.next(); 
      int intInputValue = 0; 
      if(input.charAt(0) >= 48 && input.charAt(0) <= 57){ 
       System.out.println("Correct input, exit"); 
        break; 
      } 
      System.out.println("Input is not a number, continue"); 
    } 
4

Более короткое решение. Просто возьмите вход в sc.next()

public int getInt(String prompt) { 
    Scanner sc = new Scanner(System.in); 
    System.out.print(prompt); 
    while (!sc.hasNextInt()) { 
     System.out.println("Enter a whole number"); 
     sc.next(); 
    } 
    return sc.nextInt(); 

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