2012-08-02 60 views
0

我的小應用程序正在發生一些奇怪而神祕的事情!它涉及一個人猜測一個數字,然後與一個隨機數進行比較。你一直猜測,直到你做對了。如果輸入類似Java applet發生奇怪的事情try/catch語句

ewjkgmvf 

,你會得到在輸入字段NumberFormatException。爲了解決這個問題,我使用try ... catch將字符串轉向int。如果發現異常,標籤應該顯示「這不是一個數字!」。相反,它只是說「太低,再試一次」,只有當你的猜測數量太低時纔會發生。我究竟做錯了什麼?

我會發布整個程序,因爲它只是一個短的。

這裏是我的代碼:

import java.awt.*; 
import java.applet.*; 
import java.util.Random; 
public class Number_guess_applet extends Applet{ 
    private static final long serialVersionUID = 1L; 
    Button btnClick; 
    TextField entry; 
    Label prompt; 
    String temp; 
    Random r = new Random(); 
    int x = r.nextInt(100); 
    int number; 
    int keepGoing = 1; 

     public void init(){ 
     prompt = new Label("Guess the number"); 
     add(prompt); 
     entry = new TextField(10); 
     add(entry); 
     btnClick = new Button("Check your guess"); 
     add(btnClick); 
    } 
    public boolean action(Event evt, Object arg){ 


     temp = entry.getText(); 
     try 
     { 
     number = Integer.parseInt(temp); 
     } 
     catch(java.lang.NumberFormatException e) 
     { 
     prompt.setText("That is not a number!"); 
     } 
     if (x < number) 
      prompt.setText("Too high. Try again."); 
     else if (x > number) 
      prompt.setText("Too low. Try again."); 
     else if (x == number) 
      prompt.setText("Found it!"); 
     else 
      prompt.setText("Invalid or not a number. Choose a number between 1 and 100"); 
     return(true); 


    } 
} 

回答

2

移動邏輯到try/catch語句 - 你以後執行它,所以它改寫了提示文本:

try { 
     number = Integer.parseInt(temp); 
     if (x < number) 
      prompt.setText("Too high. Try again."); 
     else if (x > number) 
      prompt.setText("Too low. Try again."); 
     else if (x == number) 
      prompt.setText("Found it!"); 
     else 
      prompt.setText("Invalid or not a number. Choose a number between 1 and 100"); 
} catch(java.lang.NumberFormatException e) { 
     prompt.setText("That is not a number!"); 
} 
return(true); 
1

仔細查看:

try 
{ 
    number = Integer.parseInt(temp); 
} 
catch(java.lang.NumberFormatException e) 
{ 
    prompt.setText("That is not a number!"); 
} 
if (x < number) { 
    //... 

如果NumberFormatException被拋出你沒有任何值設置爲number,有效地利用了前一個。您應該設置一些值爲number或完全跳過number的邏輯。否則,您的if (x < number)條件運行在之前的值number

+0

那麼如何重新啓動小程序?有沒有內置的方法? – imulsion 2012-08-02 16:03:16

1

catch塊完成執行後,方法的其餘部分執行(number保持不變)。

您需要從catch塊返回。

+0

如果無效數字是第一個輸入的數字,那麼數字可能是0,它似乎在您的測試中。這就是爲什麼它太小,不是太大。 – 0xFE 2012-08-02 16:01:41

1

它發生的是,提示得到的文字「這不是一個數字!」並立即獲得文字「太高,再試一次」。或「太低,請重試。」或「找到它!」根據舊的號碼值,號碼永遠不會被重新分配。您可以嘗試在你的操作方法如下:

 temp = entry.getText(); 
     try 
     { 
      number = Integer.parseInt(temp); 
      if (x < number) 
       prompt.setText("Too high. Try again."); 
      else if (x > number) 
       prompt.setText("Too low. Try again."); 
      else if (x == number) 
       prompt.setText("Found it!"); 
      else 
       prompt.setText("Invalid or not a number. Choose a number between 1 and 100"); 
     } 
     catch(java.lang.NumberFormatException e) 
     { 
     prompt.setText("That is not a number!"); 
     } 

     return(true); 
0

號默認爲0 。因爲你仍然在比較數字和x,你會得到這個消息。一種選擇是在你的catch塊中放入一個return語句。

+0

謝謝大家!工作正常:) – imulsion 2012-08-02 16:10:03

+0

沒問題;)快樂編碼。 – JustinKSU 2012-08-02 16:12:44