Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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打印OO表达式树_Java_Recursion_Tree_Expression - Fatal编程技术网

用java打印OO表达式树

用java打印OO表达式树,java,recursion,tree,expression,Java,Recursion,Tree,Expression,我正在研究一个面向java对象的表达式树分配,我需要能够以前缀/中缀/后缀格式计算和打印表达式树。赋值描述了一个静态类型为“Exp”的类层次结构以及几个一元和二元子类 通过让一元类和二元类实现eval()方法(由根类型“Exp”指定),我已经解决了eval部分,但是需要打印表达式的帮助。我已经为此工作了好几天,但一事无成。我在网上找到的所有帮助都是关于包含运算符和值字段的二进制类(我的作业将它们作为两个不同的类)。请朝正确的方向踢我一脚——我将非常感激:-) 致以最良好的祝愿, 拉斯姆斯 以同样

我正在研究一个面向java对象的表达式树分配,我需要能够以前缀/中缀/后缀格式计算和打印表达式树。赋值描述了一个静态类型为“Exp”的类层次结构以及几个一元和二元子类

通过让一元类和二元类实现eval()方法(由根类型“Exp”指定),我已经解决了eval部分,但是需要打印表达式的帮助。我已经为此工作了好几天,但一事无成。我在网上找到的所有帮助都是关于包含运算符和值字段的二进制类(我的作业将它们作为两个不同的类)。请朝正确的方向踢我一脚——我将非常感激:-)

致以最良好的祝愿, 拉斯姆斯


以同样的方式处理它。重写
toString
,以便在
二进制
的情况下,对
递归调用它,并返回
节点的值。

以下是如何执行中缀。前缀和后缀应该可以为你一旦你看到这一个是如何做到的

Exp
界面中,添加:

String asInfix();
二进制
类中,添加:

public final String asInfix() {
  return "(" + left.asInfix() + " " + op + " " + right.asInfix() + ")";
}
public final String asInfix() {
  return "" + value;
}
类中,添加:

public final String asInfix() {
  return "(" + left.asInfix() + " " + op + " " + right.asInfix() + ")";
}
public final String asInfix() {
  return "" + value;
}

现在您可以执行
System.out.println(bN2.asInfix())
显示
((10.0+5.0)+3.0)

亲爱的Xion,我用打印方法扩展了我的静态类型,并将其与重写的toString一起实现。当打印我在测试中创建的表达式时,递归似乎只进行了一个级别?太棒了(!):-)我可以问一下为什么要将方法声明为final吗?这只是一个习惯,因为我通常不进行任何子类化。可以省略它。