我应该使用表达式树来评估后缀表达式。 编译程序时出错
"方法getElement()未定义ExpressionTree.Node类型"
getElement对堆栈类不起作用吗? 如果不是我应该用什么来获取堆栈中的元素?
import java.util.Stack;
public class ExpressionTree
{
Node root;
// Node sub-class
public class Node
{
private String key; // key
private Node left; // links to subtrees
private Node right;
public Node(String key)
{
this.key = key;
}
}
// constructor to build a tree with postFix expression
public ExpressionTree(String postFixExpression)
{
Stack<Node> stack = new Stack<Node>();
String[] tokens = postFixExpression.split(" ");
for (String token: tokens)
{
if (isOperator(token))
{
Node right = stack.pop();
Node left = stack.pop();
Node node = new Node(token);
node.left = left;
node.right = right;
stack.push(node);
}
else
{
stack.push(new Node(token));
}
}
root = stack.pop();
}
private boolean isOperator(String token)
{
boolean result = false;
switch(token)
{
case "+":
case "-":
case "*":
case "/":
result = true;
break;
default:
result = false;
}
return result;
}
/**
* @return result of the expression
* @throws Exception
*/
public double evaluate() throws Exception
{
if (root==null)
result = 0;
else
{
temp = (ExpressionTreeOp)root.getElement();
if (temp.isOperator())
{
operand1 = evaluateNode(root.getLeft());
operand2 = evaluateNode(root.getRight());
if (operator == '+')
result = operand1 + operand2;
else if (operator == '-')
result = operand1 - operand2;
else if (operator == '*')
result = operand1 * operand2;
else
result = operand1 / operand2;
}
else
result = temp.getValue();
}
return result;
}
}
答案 0 :(得分:1)
root.getElement();
root
这是类Node
的对象。发生编译错误,因为此类没有名为getElement
的方法:
// Node sub-class
public class Node
{
private String key; // key
private Node left; // links to subtrees
private Node right;
public Node(String key)
{
this.key = key;
}
}
getElement对堆栈类不起作用吗?
示例代码中没有stack
类。为了说清楚,Java不会自动创建方法,您需要从某个现有类继承方法或自己实现它。
如果不是我应该使用什么来获取堆栈中的元素?
我想你必须自己实施这个方法。
Node getElement() {
//something
}
或者在某处使用实际的Stack
实现。此接口提供peek
和pop
方法来访问堆栈的head元素。
答案 1 :(得分:1)
java
中的Stack或Vector类中没有getElement()方法Stack.java类的方法
push
pop
peek
empty
search
Vector.java类的方法
add
addAll
get
elementAt
firstElement
lastElement
setElementAt
removeElementAt
...........