Метод try-catch в цикле while? - PullRequest
       24

Метод try-catch в цикле while?

0 голосов
/ 20 марта 2012

У меня есть этот код, и я хочу поместить try-catch в цикл while. Логика будет такой: «при наличии ошибки ввода программа будет продолжать запрашивать правильный ввод». Как я это сделаю? Заранее спасибо.

public class Random1 {

  public static void main(String[] args) {

    int g;

    Scanner input = new Scanner(System.in);
    Random r = new Random();
    int a = r.nextInt(10) + 1;


    try {
        System.out.print("Enter your guess: ");
        g = input.nextInt();
        if (g == a) {

            System.out.println("**************");
            System.out.println("*  YOU WON!  *");
            System.out.println("**************");
            System.out.println("Thank you for playing!");

        } else if (g != a) {
            System.out.println("Sorry, better luck next time!");
        }
    } catch (InputMismatchException e) {
        System.err.println("Not a valid input. Error :" + e.getMessage());
    }


}

Ответы [ 5 ]

2 голосов
/ 20 марта 2012

Здесь я использовал break и continue ключевое слово.

while(true) {
    try {
        System.out.print("Enter your guess: ");
        g = input.nextInt();
        if (g == a) {

            System.out.println("**************");
            System.out.println("*  YOU WON!  *");
            System.out.println("**************");
            System.out.println("Thank you for playing!");

        } else if (g != a) {
            System.out.println("Sorry, better luck next time!");
        }
        break;
    } catch (InputMismatchException e) {
        System.err.println("Not a valid input. Error :" + e.getMessage());
        continue;
    }
}
2 голосов
/ 20 марта 2012
boolean gotCorrect = false;
while(!gotCorrect){
  try{
    //your logic
    gotCorrect = true;
  }catch(Exception e){
     continue;
  }

}
1 голос
/ 20 марта 2012

Вы можете добавить break; в качестве последней строки в блоке try.Таким образом, если выброшено какое-либо исключение, элемент управления пропускает break и перемещается в блок catch.Но если не сгенерировано исключение, программа перейдет к оператору break, который выйдет из цикла while.

Если это единственное условие, то цикл должен выглядеть как while(true) { ... }.

0 голосов
/ 20 марта 2012

В вашем блоке catch напишите 'continue;':)

0 голосов
/ 20 марта 2012

У вас может быть просто логический флаг, который вы переворачиваете соответствующим образом.

Псевдокод ниже

bool promptUser = true;
while(promptUser)
{
    try
    {
        //Prompt user
        //if valid set promptUser = false;
    }
    catch
    {
        //Do nothing, the loop will re-occur since promptUser is still true
    }
}
...