Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算表达式树_Java_Tree_Infix Notation_Evaluate - Fatal编程技术网

Java 计算表达式树

Java 计算表达式树,java,tree,infix-notation,evaluate,Java,Tree,Infix Notation,Evaluate,我有以下代码来计算我的表达式树。但问题是它给了我错误的答案。我四处测试,发现当我编写代码时 double left = (double) Character.digit((char) evaluateTree(t.left), 10); 左值等于-1,我相信是“+”的双值。当我调用root.left(即“+”)并尝试使用Character.digit(char)获取它的双精度值时,它给出了-1。因为我的树就像: //My infix : (2+5)*7

我有以下代码来计算我的表达式树。但问题是它给了我错误的答案。我四处测试,发现当我编写代码时

double left = (double) Character.digit((char) evaluateTree(t.left),
                    10);
左值等于-1,我相信是“+”的双值。当我调用root.left(即“+”)并尝试使用Character.digit(char)获取它的双精度值时,它给出了-1。因为我的树就像:

//My infix : (2+5)*7 MyPostfix : 25+7*

     *
    / \
   +   7
  / \
 2   5
评估方法:

public double evaluateTree(TreeNode t) {

if(root == null)
return 0;
if (Character.isDigit(t.ch))
    return (double)t.ch;
else {
    char c = t.ch;
    double left = (double) Character.digit((char) evaluateTree(t.left),
            10);    
    double right = (double) Character.digit(
            (char) evaluateTree(t.right), 10);

    //checks what to do for operators for example for '+' return left+right
    return evaluate(c, left, right);

}
}

当前结果=-7.0

如何解决此问题

public double evaluate(char c, double left, double right) {

        double result = 0;
        switch (c) {
        case '+':
            result = left + right;
            break;
        case '-':
            result = left - right;
            break;
        case '*':
            result = left * right;
            break;
        case '/':
            result = left / right;
            break;
        case '%':
            result = left % right;
            break;
        }
        return result;

    }

不要对
evaluateTree()
的结果调用
Character.digit()
evaluteTree()
evaluate()
返回一个
double
,而不是需要转换为double的字符。它是

if (Character.isDigit(t.ch))
    return (double)t.ch;

需要调用
Character.digit()
的地方。

哪里是
evaluate()?
@EJP添加了evaluate。