我有一棵二叉树。我问用户一个问题,如果他说是,我给他左分支,否则我给他正确的分支。 (方法:get_answer2)
但是当我这样做时:
var current_node = Node("Test")
current_node.set_left = Node("End node")
current_node = current_node.get_answer2("y")
我得到了
Tree [Nothing]类型的表达式不符合预期类型Tree [Nothing](来自IntelliJ)
sealed abstract class Tree[+T] {
}
case object End extends Tree[Nothing] {
var left = "Blah"
var right = "Blah"
override def toString = "."
}
case class Node[T](var question: String, var left: Tree[T] = End, var right: Tree[T] = End) extends Tree[T] {
def get_answer2(answer: String) ={
if (answer == "y"){
right
}else{
left
}
}
def change_left_tree( new_tree : Tree[T]) = {left = new_tree}
def change_right_tree( new_tree : Tree[T]) = {right = new_tree}
}
答案 0 :(得分:0)
消化解决方案:
var current_node = Node("Test")
current_node.left = Node("End node")
var answer = current_node.get_answer2("n")
answer match {
case End => {
println("Empty")
}
case x: Node[_] => {
println("Node")
current_node = x
println(current_node)
}
}
您的代码问题是该变量' left'被声明为树。树比Node更广泛。对于编译器而言,分配给变量' left'的对象并不重要。属于'节点'。
在我的解决方案var'回答'属于'树'。将其投射到类型节点'我使用过'匹配'有两种情况的构造(第一个用于空节点,第二个用于非空)