高分:一道简单的Java练习题:关于抽象类继承的问题~

这是一道简单的java作业题,实在是无从下手,请高手指导一下,如果能帮助写出较好的代码,追加50分!(可以百度Hi我~)

题目要求是:将算术表达式(含括号)改写成中序表达的二叉树。

已给了整个程序的结构。

一个Expression类,作为所有表达式类型的抽象父类。

一个Constants类,是Expression的子类之一,表示算术式中的常量。

一个Variable类,是Expression的子类之一,表示算术式中的变量。

一个OperatorExpression类,是Expression的子类之一,表示算术式中的运算符号。

除此以外,还有assignVariables类,用于给变量赋值。

还有最重要的类叫做Parser,用于分解这个算术表达式。这个类要利用前面的Expression来判断分解出来的是什么类型。

我自己尝试写了一下,但是对于Parser我没有概念,因为老师给出的方法是返回Expression类型,我到底应该怎么写呢?

请各位高手帮帮忙哦!能帮我写出完整代码的还有追加~~

以下是我写的,肯定有很多不对的地方(尤其是每个子类的givValue方法是我猜的~ 其他的方法是老师规定的):

abstract class Expression {
public abstract int givValue(assignVariables variables);
}

public class Constants extends Expression {
private int Constants;
public Constants(int Constants) {
this.Constants = Constants;
}
public int givValue(assignVariables variables){
return this.Constants;
}
}
public class Variable extends Expression{
private String variable;
private int constants;
public Variable(String variable){
this.variable = variable;
}
public int givValue(assignVariables variables){
return this.constants;
}
}
public class OperatorExpression extends Expression{
private Expression expression1;
private char operator;
private Expression expression2;
private int constants;
public OperatorExpression(Expression expression1, char operator, Expression expression2){
this.expression1 = expression1;
this.operator = operator;
this.expression2 = expression2;
}
public int givValue(assignVariables variables){
return this.constants;
}

}
public class assignVariables {
private String variable;
private int value;
public assignVariables(){

}
public void assignValue(String variable, int value){
this.variable = variable;
this.value = value;
}
public int givValue(String variables){
return this.value;
}
}
public class Parser {
public Expression parse(String expression){
}
}
是要转化成中序的二叉树形式,给一个例子:
(ab + 1) ∗ 5/(b + 201 ∗ (a − b))
转化成插入图片中的二叉树的样子

个人感觉你们老师应该是为了让你们多理解下对象吧。这个问题其实不是在于类的继承问题,而是在于把优先级分清楚了

其次,在表达式的拆分过程中应该把各变量,常量的位置记录下来,运算符的位置和优先级(这个很重要)记录下来。也就是在你的各个类中加一个记录位置的成员变量。

最后根据优先级从高到低,从左到右的输出。比如你的例子中:+ × / 和后面括号里的在同一优先级。那么按照从左到右的顺序输出,也可以存到二叉树结构里去。对于括号里的你也可以看做是一个表达式,直接作为一个子树处理

当然这只是我看了之后想到一些,估计写的时候还是会有一些问题。说的不好,请不要见怪。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-22
算数表达式本来就是中序的嘛 还要转化啊
第2个回答  2010-04-22
关注。。从来没搞过这个。。。
第3个回答  2010-04-23
很简单的
第4个回答  2010-04-28
关注。。
第5个回答  2010-05-04
我这有一个以前练习的时候写的,没用面向对象写法,但是支持编译
如a+b*c-123+(d+e)*12
转化为(((a+(b*c))-123)+((d+e)*12)) .....(这个只是输出形式,实际上在内存里是二叉树)
由于代码很多(没有自动构造解析器,纯手工解析字符串并且支持字节码编译)故代码两很大这里放不下。如果有需要hi我或者留下邮箱我给你我这份(白天在公司hi不了)。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网