2012-08-02 59 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