2013-02-28 43 views
0
boolean gotGoodGenInput = false; 
    while (!gotGoodGenInput) 
    { 

    gotGoodGenInput = true; 

    String inputGen = JOptionPane.showInputDialog 
    (
     "Enter your Generation \n" + 
     "It must be a number from 0 to 25" 
    ); 

    if(inputGen != null) 
    { 

     if (inputGen.isEmpty() || !inputGen.matches("[0-9]*")) 
     { 
     JOptionPane.showMessageDialog 
     (
      null, 
      "Please input a number from 0 to 25", 
      "Error", 
      JOptionPane.ERROR_MESSAGE 
     ); 
     gotGoodGenInput = false; 
     } 

     int GenNumber = Integer.parseInt(inputGen); 

     if (GenNumber < 0 || GenNumber > 25) 
     { 
     JOptionPane.showMessageDialog 
     (
      null, 
      "Your number can't be less than 0 or greater than 25", 
      "Error", 
      JOptionPane.ERROR_MESSAGE 
     ); 
     gotGoodGenInput = false; 
     } 

    } 
    else 
    { 
     System.exit(0); 
    } 
    } 

你好我遇到的問題是,如果用戶輸入「A」(作爲一個例子),那麼他們將得到錯誤「請輸入一個從0到25」從while循環不設置後重復虛假

if (inputGen.isEmpty() || !inputGen.matches("[0-9]*")) 

它應該重新啓動循環,當它命中gotGoodGenInput = false;

但它一直要到下一部分在那裏它會嘗試解析INT但當然會報錯,因爲「A」是不是int

所以我的問題是爲什麼不重新開始時,達到gotGoodGenInput = false;在第一條if語句中。

回答

3

gotGoodGenInput = false; 

後增添線

continue; 

這將從while循環的開始重新啓動。

+0

謝謝修復它 – Mert 2013-02-28 19:54:52

0

貌似存在丟失其他如果在您檢查字符串是否爲整數空的或不同的語句。像這樣,它將輸入如果語句,但然後繼續到下一個嘗試解析int的地方。

2

只是設置gotGoodGenInput=false是不夠重新啓動循環。您已更改變量的值,但尚未告知程序不要繼續循環。

您可能希望在每次將gotGoodGenInput設置爲false以獲得您描述的行爲後,添加continue;語句。

您可能還想了解Swing的InputVerifiers。看看這個帖子:Java Swing: Implementing a validity check of input values