0

我编写了以下代码来获取用户的输入并将其解析为加倍以进行进一步计算。问题是这个程序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 中单击运行或播放按钮时,出现此异常。

您的初始值MultiplicandMultiplier必须是有效值double才能Double.parseDouble不抛出NumberFormatException.

请注意,如果您希望将每个值设置JTextField1您可以执行以下操作:

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 回答