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

这是一道简单的java作业题,实在是无从下手,请高手指导一下,如果能帮助写出较好的代码,追加50分!(可以百度Hi我~)题目要求是:将算术表达式(含括号)改写成中序表达的... 这是一道简单的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))
转化成插入图片中的二叉树的样子
展开
 我来答
百度网友41ac8b9
2010-04-22
知道答主
回答量:19
采纳率:0%
帮助的人:18.1万
展开全部
个人感觉你们老师应该是为了让你们多理解下对象吧。这个问题其实不是在于类的继承问题,而是在于把优先级分清楚了

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

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

当然这只是我看了之后想到一些,估计写的时候还是会有一些问题。说的不好,请不要见怪。
rundeathman
2010-04-22 · TA获得超过189个赞
知道小有建树答主
回答量:454
采纳率:0%
帮助的人:154万
展开全部
算数表达式本来就是中序的嘛 还要转化啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泥土中的露珠
2010-04-22 · TA获得超过2.7万个赞
知道小有建树答主
回答量:1136
采纳率:100%
帮助的人:533万
展开全部
关注。。从来没搞过这个。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-04-23
展开全部
很简单的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无敌还顺当丶宠物Q
2010-04-28
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
关注。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pe...n@sina.com
2010-05-04 · TA获得超过893个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:242万
展开全部
我这有一个以前练习的时候写的,没用面向对象写法,但是支持编译
如a+b*c-123+(d+e)*12
转化为(((a+(b*c))-123)+((d+e)*12)) .....(这个只是输出形式,实际上在内存里是二叉树)
由于代码很多(没有自动构造解析器,纯手工解析字符串并且支持字节码编译)故代码两很大这里放不下。如果有需要hi我或者留下邮箱我给你我这份(白天在公司hi不了)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式