2012-03-20 3 views
-1

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

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()); 
    } 


} 
+8

Где ваш цикл while и ваша попытка решить это самостоятельно? Это позволит а) помочь вам узнать больше, b) показать нам, где ваши предположения являются неправильными и позволяют нам предлагать гораздо лучшую направленную помощь, и c) значительно увеличить наше уважение к вам. –

+0

Зачем писать ответы на этот вопрос? Пусть ОП поставит вопрос первым. –

+0

Вы правы. Прости. Благодарю также. Я просто не очень хорошо разбираюсь в самообразовании. Опять же, мне жаль. – singko

ответ

1

Возможно, у вас есть булевский флаг, который вы переворачиваете по мере необходимости.

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

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 
    } 
} 
1
boolean gotCorrect = false; 
while(!gotCorrect){ 
    try{ 
    //your logic 
    gotCorrect = true; 
    }catch(Exception e){ 
    continue; 
    } 

} 
0

В вашем поймать записи блока 'continue;' :)

2

Здесь я использовал перерыв и продолжают ключевое слово.

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; 
    } 
} 
+0

'break' находится не в том месте, но это действительный подход. – erickson

+0

@erickson вы можете сказать, как перерыв находится в неправильном месте? –

+0

@erickson Я получил его благодаря вам. –

1

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

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

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