我正在使用界面创建一个包含数字和字母的二叉树。我添加了所有字母但是当我尝试使用add方法将数字添加到字母节点时,我得到一个“类型Collection>中的方法add(Node)不适用于arguments(int)”错误。
接口方法是;
public void addChild(Node<treeNode> child);
public void addChild(int i);
实施的方法是;
@Override
public void addChild(Node<treeNode> child) {
children.add(child); // delegation
}
@Override
public void addChild(int i) {
children.add(i);
}
父节点代码本身就在一个类中,看起来像这样;
Node<String> H = new NodeImplement<String>("H", S, "left");
S.addChild(H);
我尝试添加的节点数量如下所示
Node<String> 5 = new NodeImplement<String>("5", H, "left");
H.addChild(5);
Node<String> 4 = new NodeImplement<String>("4", H, "right");
H.addChild(4);
我必须以某种方式解析这个吗?我从eclipse中获得的一个选项是“将方法addChild(Node child)更改为addChild(int)”,但这会影响已经存在的字母表中的字母。
答案 0 :(得分:1)
不是写出指定字符串所在的数字,而是将数字拼出,然后将其添加为字符串
Node<String> five = new NodeImplement<String>("5", H, "left");
H.addChild(five);
Node<String> four = new NodeImplement<String>("4", H, "right");
H.addChild(four);
答案 1 :(得分:0)
您收到错误的原因: 方法add(Node)类型Collection&gt;不适用于参数(int)“错误 是因为您将整数传递给需要Node类型对象的方法。
你的树是否有字母作为节点的名称和数字作为值?这就是我的样子。假设这是你可以做的是拥有一个类Node。该类具有 int value , Node left , Node right 的属性。如果它没有左/右节点,那么这些属性将为null。
因此,当您向节点添加数字5时,您要做的是添加一个值为5的节点。 这有意义吗?
答案 2 :(得分:0)
您的“数字节点”实际上是字符串节点。它甚至说Node。从您的界面和您的类中删除addChild(int i)。那应该可以解决问题。但请注意,您的数字由字符串表示。
如果您想在同一个树中使用不同的类型,则必须创建一个接口并让所有类型实现它。
Interface NodeType {
}
class NodeTypeString implements NodeType {
private String string;
public NodeTypeString(String string) {
this.string = string;
}
public String getString() {
return string;
}
}
class NodeTypeNumber implements NodeType {
private int number;
public NodeTypeNumber(int number) {
this.number=number;
}
public int getNumber() {
return number;
}
}
您可以像这样使用它:
NodeTypeNumber number = new NodeTypeNumber(5);
Node<NodeType> numberNode = new NodeImplement<NodeType>(number, H, "left");
NodeTypeString string = new NodeTypeString("foo");
Node<NodeType> stringNode = new NodeImplement<NodeType>(string, S, "right");
S.addChild(H);
树也显然是Tree<NodeType>
另一种选择是使用Tree<Object>
,因为你可以在里面存储任何对象。我会建议反对它,因为它容易出错。