0

私は3つのクラスを持つ式ツリーを作成しました(1つは式を評価し、それの接尾辞と中置記法(Expr)を与えるツリーの構造用、もう1つは式からツリーを構築するだけです(stackを使用)。 ..) もう 1 つは私のメインである EvalExpr です) しかし、式 "( 2 + 3.5 )" のエラーが発生し、それがどこから来たのかわかりません。次のようなエラー:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3.5"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at exprTree.Expr.eval(Expr.java:68)
    at exprTree.Expr.eval(Expr.java:74)
    at exprTree.Expr.eval(Expr.java:73)
    at exprTree.Expr.eval(Expr.java:73)
    at EvalExpr.main(EvalExpr.java:42)

そして、私のメソッド eval() は次のようになります:

public double eval() 
    {
        double leftOperand = 0;
        double rightOperand = 0;
        String operator;

        if(this == null)
            return 0;

        else if(rightChild == null && leftChild == null)
            return Double.parseDouble(value); 

        else 
        {
            operator = value;
            leftOperand = leftChild.eval();
            rightOperand = rightChild.eval();
            return calc(operator, leftOperand, rightOperand);
        }
    }

この不思議なエラーを見つけるのを手伝ってくれる人はいますか? ありがとう

4

1 に答える 1

1

一部のコード (表示されていない) は、「3.5」を int に解析しようとしていますが、これは機能しません。

at java.lang.Integer.parseInt(Integer.java:527)
at exprTree.Expr.eval(Expr.java:68)

Expr.java の 68 行目を見てください。

上記のコード (代わりに Double.parseDouble を使用) を実行していると思われる場合は、すべてを再コンパイルしてみてください。

また、Double が引き起こす可能性のある厄介な浮動小数点精度の問題を回避する BigDecimal の使用も検討します。

于 2013-04-30T09:58:25.177 に答える