0

奇妙で不思議なことが私のアプレットで起こっています!それは人が数を推測することを含み、それは次に乱数と比較されます。あなたはそれが正しくなるまで推測し続けます。あなたが次のようなものを入力した場合

ewjkgmvf

NumberFormatException入力フィールドにが表示されます。この問題を解決するために、文字列のintへの変換をtry...catchで囲みました。例外がキャッチされた場合、ラベルには「それは数字ではありません!」と表示されるはずでした。代わりに、「低すぎます。再試行してください」とだけ表示されます。これは、推測された数が少なすぎる場合にのみ発生するはずでした。私は何が間違っているのですか?

短いものなので、プログラム全体を掲載します。

これが私のコードです:

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

何が起こるかというと、プロンプトに「That is not a number!」というテキストが表示されます。すぐに「高すぎます。やり直してください」というテキストが表示されます。または「低すぎます。もう一度お試しください。」または「見つけた!」number の古い値によっては、number が再割り当てされることはありません。アクション メソッドで次のことを試すことができます。

        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 に答える
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 に答える
0

Number のデフォルトは 0 です。まだ number と x を比較しているため、そのメッセージが表示されます。1 つのオプションは、return ステートメントを catch ブロック内に配置することです。

于 2012-08-02T16:01:51.303 に答える