gpt4 book ai didi

java - 在这个多态性练习中,我如何计算由一系列节点表示的方程式?

转载 作者:行者123 更新时间:2023-11-29 05:29:38 25 4
gpt4 key购买 nike

我试图理解这个多态性练习中的代码是如何工作的。

我想我理解这个概念;但是,我无法理解如何将其应用于等式: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

请注意,AdditionNodeMultiplicationNodeOpNode 的类型。

每个OpNode 指的是一个左Node 和一个右Node。重要的是要了解这些 Node 中的任何一个都可以是 ValueNodeOpNode

不过不要忘记操作顺序。乘法先于加法。

因此,当您将这种关系表示为一系列节点时,您需要牢记这一点。

如果您的代码中有适当的构造函数(您没有),您可以使用依赖注入(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com