- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解这个多态性练习中的代码是如何工作的。
我想我理解这个概念;但是,我无法理解如何将其应用于等式:1 + 2 * 3
abstract class Node {
abstract double evaluate();
}
public class ValueNode extends Node {
double value;
double evaluate() {
return value;
}
}
public abstract class OpNode extends Node {
Node left;
Node right;
abstract double evaluate();
}
public class MultiplicationNode extends OpNode {
double evaluate() {
return left.evaluate() * right.evaluate();
}
}
public class AdditionNode extends OpNode {
double evaluate() {
return left.evaluate() + right.evaluate();
}
}
最佳答案
注意 在我看来,在这种情况下,Node
更适合定义为 interface
。你确定它不是一个 interface
而不是 abstract class
吗?
你正试图表示等式
1 + 2 * 3
根据您的代码,您有两种类型的节点
:
ValueNode
- 代表一个值OpNode
- 代表一个操作因此,根据您的等式,您有 5 个节点:
ValueNode = 1
AdditionNode = +
ValueNode = 2
MultiplicationNode = *
ValueNode = 3
请注意,AdditionNode
和 MultiplicationNode
是 OpNode
的类型。
每个OpNode
指的是一个左Node
和一个右Node
。重要的是要了解这些 Node
中的任何一个都可以是 ValueNode
或 OpNode
。
不过不要忘记操作顺序。乘法先于加法。
因此,当您将这种关系表示为一系列节点时,您需要牢记这一点。
如果您的代码中有适当的构造函数(您没有),您可以使用依赖注入(inject)执行以下操作:
Node node = new AdditionNode(
new ValueNode(1),
new MultiplicationNode(
new ValueNode(2),
new ValueNode(3)
)
);
现在,当你打电话
node.evaluate();
你会得到方程式的答案。
你的构造函数应该是这样的:
class ValueNode {
double value;
public ValueNode(double value) {
this.value = value;
}
}
class OpNode {
Node left;
Node right;
public OpNode(Node left, Node right) {
this.left = left;
this.right = right;
}
}
这是一个工作示例:http://ideone.com/oCVR8S
关于java - 在这个多态性练习中,我如何计算由一系列节点表示的方程式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562345/
我想弄清楚如何将一周内的所有工作时间相加。 “hours”代表一周工作的小时数,“hoursDay”代表一天的工作小时数。唯一的问题是弄清楚如何在它们都由相同的名称表示时将它们全部添加。下面是我的代码
我正在尝试制定一个方程式,根据每 XX 时间的新用户及其推荐用户的输入来确定给定时间的用户数量。 基本上,我们希望每周向系统手动添加 100 个用户。我们假设每个新用户在接下来的每个星期都会再推荐一个
我正在尝试提出一个评级算法 - 所以它会做的是,从用户拥有的一组关键字(用于 SEO)中,为每个关键字提供 1-10 之间的评级(10 是最好的机会来自该集合)- 将通过比较关键字具有的“搜索量”与“
我正在尝试打开队列中的所有弹出窗口,以便它们根据队列数组中的项目数量具有不同的大小和位置。当弹出窗口启动时,想法是它们将完全填满用户屏幕(使用 screen.width 和 screen.height
我已经从一组数据创建了一个 Canvas 饼图,我现在试图定位鼠标相对于饼图的位置,以检测悬停在哪个数据部分。我快到了,但我被一个等式困住了。 我的逻辑运行良好,所以我认为这更像是一道数学题,但我会看
我正在编写一个 python 库来求解各种物理方程,并想为每个方程添加一个方法来显示 LaTeX 格式的方程。我考虑过使用 LaTeX 到 PNG 转换器,然后以某种方式显示与终端内联的图像,这导致我
我的值(value)观是: 0.263 0 0.265 0 0.267 0 0.269 0.0001 0.271 0.0003 0.273 0.0006 0.275 0.0011 0.277 0.00
我的代码在 JavaDoc 注释中通常有很多方程式。我目前正在使用 MathML 来显示这些方程式,因为这是我能够获得可以在 Eclipse 的悬停工具提示中显示的方程式的唯一方法。 我实际上并不关心
是否可以从特定网站导出文本、图像和 LaTeX 方程式,以便您可以直接自定义您自己的 PDF 而不会模糊对象?只有图像具有固定分辨率。 我知道有几种间接生成 PDF 的方法。试图在 Riemann Z
对于我的 C 程序,用户输入“aY + b = c”,其中 a、b 和 c 是 int 值,Y 是“符号常量”。 如何使“aY+b=c”与“aY + b = C”一样有效?基本上,我不确定如何利用 s
我正在根据数据集计算线性回归。我不知道编译时的回归模型或参数数量。 我将回归方程作为字符串存储在 SQL Server 2005 数据库中 y = 3x^2 + 2x // just an examp
我是一名优秀的程序员,十分优秀!