Ich habe die folgende Methode. Seine Logik ist sehr einfach, wenn rechts gesetzt ist, dann rufen Sie links auf, während es einen Wert (nicht null) hat. Wenn ich es auf die folgende Weise schreibe, funktioniert es.Kotlin-Compiler kann nicht herausfinden, dass Variable in Do-While-Schleife nicht nullbar ist
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
prev = next
next = next.left
while (next != null) {
prev = next
next = next.left
}
}
return prev
}
Wenn stattdessen ich versuche, den Code zu verkürzen, eine do-while-Schleife verwenden, ist es nicht mehr Smart wirft next
zu Node
. Es zeigt diesen Fehler:
Type mismatch.
Required: Node<T>
Found: Node<T>?
Der Code folgt:
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
do {
prev = next // Error is here, even though next can't be null
next = next.left
} while (next != null)
}
return prev
}
Warum vereinfachst du nicht einfach 'while (next! = Null) {...}'? –
Sie haben Recht! Ich habe es nicht gesehen. – biowep