2013-11-17 2 views
0

Я хотел бы, чтобы программа повторно выполняла цикл while, когда он ловит исключение, - исключение получает текстовый ввод. Вместо этого он продолжает цикл while с кодом ниже, я бы хотел, чтобы он снова попросил ввести пользователя.Попробуйте исключить исключение бесконечный цикл while

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class NumberGuess { 
    public static void main(String[] args) { 

     Scanner Scanner = new Scanner(System.in); 

     int between = 100; 
     int secretNumber = (int)(Math.random()*between); 
     int inputNum = 0; 
     int guesses = 0; 

     System.out.println("Please enter your guess: "); 
     inputNum = Scanner.nextInt(); 
     guesses++; 

     // #### Loop here #### 
     while (inputNum != secretNumber) { 
      // Try catch 
      try { 

      // number too high or too low 
      if (inputNum > 100 | inputNum < 0) { 
       System.out.println("Please enter a guess between 0 and " + between + "."); 
       inputNum = Scanner.nextInt(); 
      } 

      // less than secretNumber 
      if (inputNum < secretNumber) { 
       System.out.println("Try higher"); 
       inputNum = Scanner.nextInt(); 
       guesses++; 
      } 

      // greater than secretNumber 
      if (inputNum > secretNumber) { 
       System.out.println("Try lower"); 
       inputNum = Scanner.nextInt(); 
       guesses++; 
      } 
      } 
      catch(InputMismatchException e){ 
       System.out.println("Invalid Input"); 
      } 
     } 


     System.out.println("\nWell done! The secret number was " + secretNumber + "." + "\nYou took " + guesses + " guesses."); 
     } 

} 

Выход:

Invalid Input 
Try higher 
Invalid Input 
Try higher 
Invalid Input 
Try higher 
Invalid Input 
Try higher 
Invalid Input 
Try higher 
Invalid Input 
Try higher 
Invalid Input 
Try higher 
+0

'Сканер = новый сканер (System.in) ; 'Это действительно компилируется? – Maroun

+4

@MarounMaroun уверен, что это так, это просто не соответствует соглашениям об именах Java – Reimeus

+0

@Reimeus Полезно знать, я никогда не пробовал это :) – Maroun

ответ

0

| является логическим оператором. Использование условного ||

if (inputNum > 100 || inputNum < 0) { 
+2

'||' также является логическим оператором. Он реализует логическую функцию ИЛИ так же, как '|'. –

5

изучить документацию на Scanner:

Когда сканер бросает InputMismatchException, сканер не будет передавать маркер, вызвавшей исключение, так что он может быть извлечен или пропущен через другой метод.

Если вы поймаете исключение, сканер останется там, где он был, прежде чем пытаться прочитать номер. Вы должны продвинуть его с помощью nextLine в блоке catch.

+0

Блестящий - это сработало. Просто добавлено «Scanner.nextLine();» к методу улова. Большое спасибо. –

0

Внесите 2 изменения, как показано ниже, которые помогут вам реализовать нужную функцию.

1 Изменение if (inputNum > 100 | inputNum < 0) { в if (inputNum > 100 || inputNum < 0) {

Если ввести нецифровые номера, такие как , то InputMismatchException Exceptiom может быть caugt.

  1. Когда InputMismatchException исключение произойдет, добавьте код вызова Scanner.next(), чтобы сделать возможным повторно ввести номер в консоли.

Изменить

 // greater than secretNumber 
     if (inputNum > secretNumber) { 
      System.out.println("Try lower"); 
      inputNum = Scanner.nextInt(); 
      guesses++; 
     } 
     } 
     catch(InputMismatchException e){ 
      System.out.println("Invalid Input"); 

     } 

К

 // greater than secretNumber 
     if (inputNum > secretNumber) { 
      System.out.println("Try lower"); 
      inputNum = Scanner.nextInt(); 
      guesses++; 
     } 
     } 
     catch(InputMismatchException e){ 
      System.out.println("Invalid Input"); 
      Scanner.next(); 

     } 

С учетом указанных выше изменений, тест выглядит следующим образом:

Please enter your guess: 
60 
Try higher 
80 
Try higher 
90 
Try lower 
a 
Invalid Input 
Try lower 
80 
Try higher 
85 
Try lower 
84 
Try lower 
83 
Try lower 
82 
Try lower 
81 

Well done! The secret number was 81. 
You took 9 guesses. 
Смежные вопросы