0

我的小程序发生了一些奇怪而神秘的事情!它涉及一个人猜测一个数字,然后将其与一个随机数进行比较。你一直在猜测,直到你猜对了。如果您输入类似

ewjkgmvf

你会NumberFormatException在输入字段上得到一个。为了解决这个问题,我用 try...catch 包围了 String 到 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);


    }
}
4

5 回答 5

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);
于 2012-08-02T16:01:23.270 回答
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

于 2012-08-02T15:59:51.410 回答
1

在 catch 块完成执行后,该方法的其余部分将执行(number保持不变)。

您需要从catch街区返回。

于 2012-08-02T15:59:53.903 回答
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);
于 2012-08-02T16:01:21.617 回答
0

Number 默认为 0。由于您仍在将 number 与 x 进行比较,因此您会收到该消息。一种选择是将 return 语句放在你的 catch 块中。

于 2012-08-02T16:01:51.303 回答