2017-01-13 19 views
1

我寫了一個程序,可以捕捉用戶輸入錯誤。我不斷收到一個無限的while循環

當我試圖讓我的程序做一個「做過」(帶有do while循環)時,它會遇到錯誤。該程序(而不是通過掃描器的用戶輸入重新啓動)將反覆打印來自異常捕獲塊的System.out.println行。

下面是我的代碼,我真的希望有人能幫助我。

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

[Scanner在使用next(),nextInt()或其他nextFoo()方法之後跳過nextLine()的可能副本(http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after- using-next-nextint-or-other-nextfoo) –

回答

0

嘗試通過調用catch塊中掃描器上的nextLine()方法將掃描器推進到下一行。這應該清除輸入。

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

非常感謝你:) 這已解決了我的問題我會upvote你的答案,但我缺乏業力這樣做。 所以我只能說再次謝謝你,這讓我昨天瘋了! – Forcio