我的小程序正在发生奇怪和神秘的事情!它涉及一个人猜测一个数字,然后将其与随机数进行比较。你一直在猜测,直到你做对了。如果您输入了类似
的内容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);
}
}
答案 0 :(得分: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 :(得分: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
值运行。
答案 2 :(得分:1)
catch块完成执行后,方法的其余部分执行(number
未更改)。
您需要从catch
块返回。
答案 3 :(得分: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);
答案 4 :(得分:0)
数字默认为0.由于您仍在将数字与x进行比较,因此您将收到该消息。一种选择是在catch块中放置一个return语句。