0

次のコードを書いて、ユーザーからの入力を取得し、それを解析してさらに計算するために double にしました。問題は、このプログラムがjava.lang.NumberFormatExceptionコンパイル時にこのエラーを表示していることjava.lang.Double.parseDouble(Unknown Source)です。このエラーが生成される理由がわかりません。だから私の質問は:

  • このエラーの原因は何ですか?
  • コンパイル時に例外が発生するのはなぜですか。C++ では、何か問題が発生した場合、実行時に例外が発生します。この Java の動作が理解できません。

コードは次のとおりです。

ノート:

被乗数と乗数は JTextField です

public void TakeInput()
{
     double a,b;
    String input1="1",input2="1";

    input1=Multiplicand.getText();
    input2=Multiplier.getText();

    a=Double.parseDouble(input1);// converting string input to double
    b=Double.parseDouble(input2);
   ....
}

Eclipse で実行または再生ボタンをクリックすると、この例外が発生します。そのため、これらのテキスト フィールドに入力を行うことができません

よろしく

4

3 に答える 3

1

Eclipse で実行または再生ボタンをクリックすると、この例外が発生します。

との初期値は、をスローしないために有効な値でMultiplicandなければなりません。MultiplierdoubleDouble.parseDoubleNumberFormatException

JTextFieldそれぞれに値を設定したい場合は、次のようにし1ます。

Multiplicand.setText("1");
Multiplier.setText("1");

また、NumberFormatException実行時または未チェックの例外です。try/catchこの例外を適切に処理できるように、割り当てをブロックでラップできます。

于 2012-12-24T14:29:27.333 に答える
0

parseDouble は、チェック済み例外 NumberFormatException を宣言します。これは、メソッド TakeInout がこれをどのように処理するかを宣言する必要があることを意味します。メソッドで例外をスローできることを宣言するか、parseDouble の周りに try/catch ブロックを配置する必要があります。

違いの詳細については、こちらをご覧ください。

于 2012-12-24T14:29:03.970 に答える
0

input1=Multiplicand.getText();が実際に に解析できる値であることを確認してくださいDouble。そして、うまくいかない可能性がある場合 (たとえば、ユーザー入力値)、行をtry/catchブロックで囲みます。

public void takeInput() {
    String input1="1", input2="1";
    input1 = Multiplicand.getText();
    input2 = Multiplier.getText();
    System.out.println("'" + input1 + "', '" + input2 + "'"); //log inputs
    double a, b;
    try {
        a = Double.parseDouble(input1);// converting string input to double
        b = Double.parseDouble(input2);

    }
    catch (NumberFormatException nfe) {
        //either
        return;
        //or something like:
        a = 0;
        b = 0;
        //and continue
    }

   ....
}
于 2012-12-24T14:37:40.767 に答える