将解析分解为Double

时间:2012-12-24 14:18:07

标签: java parsing exception

我编写了以下代码来从用户那里获取输入并将其解析为double以进行进一步的计算。问题是这个程序在编译时给了我java.lang.NumberFormatException这个错误java.lang.Double.parseDouble(Unknown Source)。我不知道为什么会产生这个错误。所以我的问题是:

  • 此错误的原因是什么?
  • 为什么我在编译时遇到异常。在C ++中,如果出现问题,我会在运行时获得异常。我无法理解Java的这种行为。

以下是代码:

注意:

Multiplicand和Multiplier是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中点击运行或播放按钮时,我得到了这个例外。这就是为什么我无法向这些文本字段提供任何输入

此致

3 个答案:

答案 0 :(得分:1)

  

当我在eclipse中点击运行或播放按钮时,我得到了这个例外。

MultiplicandMultiplier的初始值必须是double的有效Double.parseDouble值,而不是NumberFormatException

请注意,如果您希望将每个JTextField中的值设置为1,则可以执行以下操作:

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

此外,NumberFormatException是运行时或未选中例外。您可以将分配包装在try/catch块中,以便您可以优雅地处理此异常。

答案 1 :(得分:0)

parseDouble声明已检查的异常NumberFormatException。这意味着你的方法TakeInout需要声明它将如何处理它。您的方法必须声明它可以抛出异常,或者您需要在parseDouble周围放置try / catch块。

您可以详细了解差异here

答案 2 :(得分: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
    }

   ....
}