2017-01-13 4 views
1

Я написал программу, которая может поймать ошибку ввода пользователя.Я продолжаю получать бесконечное выполнение while loop

Когда я пытаюсь сделать свою программу «сделай сверху» (с циклом do while), она столкнулась с ошибкой. Программа (вместо перезапуска с помощью пользовательского ввода через сканер) снова и снова будет печатать строки System.out.println из блока catch catch.

Ниже мой код, и я очень надеюсь, что кто-то может мне помочь.

int x = 0; 
    int y = 0; 
    int Temp = 0; 
    int Rest = 0 ; 
    int Works = 1; 

    Scanner s = new Scanner(System.in); 

    do{ 
    try{ 

    System.out.println("Bitte geben sie zwei Nummern ein für den ggT."); 
    System.out.print("Die erste Nummer: "); 
    x = s.nextInt(); 

    System.out.print("Die zweite Nummer: "); 
    y = s.nextInt(); 

    if (x < y){ 
     Temp = x; 
     x = y; 
     y = Temp; 
     }System.out.println("Berechnung des ggT von " +x +" und " +y +"."); 

     do{ 
     System.out.println("Rechne " +x +" mod " +y +": "); 
     Rest = x % y; 
     if (Rest != 0){ 
      x = y; 
      y = Rest; 
     } 
     }while (Rest !=0); 
    System.out.println("Der größte gemeinsame Teiler lautet: " + y);  
    Works=2;  
    } 
    catch(Exception e){ 
      System.out.println("Sie dürfen nicht durch Null (0) teilen."); 
      System.out.println("Sie dürfen keine Dezimalzahlen benutzen."); 
      System.out.println("Sie dürfen keine Zeichen benutzen."); 
      System.out.println("Versuchen wir es noch einmal :)"); 
     } 
}while(Works==1); 
} 

Это напечатает

Bitte geben sie zwei Nummern ein für den ggT. 
Die erste Nummer: 
Sie dürfen nicht durch Null (0) teilen. 
Sie dürfen keine Dezimalzahlen benutzen. 
Sie dürfen keine Zeichen benutzen. 
Versuchen wir es noch einmal :) 

снова и снова. Вместо ожидания ввода пользователя.

Надеюсь, что немецкий, а также мой код не отложить.

+1

Где находится javascript? –

+0

Какие ошибки ввода вы используете? –

+0

Возможный дубликат [Сканер пропускает nextLine() после использования следующих(), nextInt() или других методов nextFoo()] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after- using-next-nextint-or-other-nextfoo) –

ответ

0

Попробуйте перевести сканер на следующую строку, вызвав метод nextLine() на вашем сканере s в вашем блоке catch. Это должно очистить ввод.

catch(Exception e){ 
     System.out.println("Sie dürfen nicht durch Null (0) teilen."); 
     System.out.println("Sie dürfen keine Dezimalzahlen benutzen."); 
     System.out.println("Sie dürfen keine Zeichen benutzen."); 
     System.out.println("Versuchen wir es noch einmal :)"); 
     s.nextLine(); // Advance Scanner to the next line 
    } 
+0

Огромное вам спасибо :) Это исправило мою проблему, я бы поднял ваш ответ, но мне не хватало кармы, чтобы сделать это. Так что я просто должен еще раз поблагодарить вас, это заставило меня гадить вчера! – Forcio

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