我是 Kotlin 的初学者,面临这个问题。
data class Node(val data :Int, var next:Node?=null)
private var head :Node ?=null
fun insert(data:Int){
if(head==null)
{
head=Node(data)
}
else
{
var current = head
while (current?.next!=null)
{
current=current.next
}
current?.next=Node(data)
}
}
fun print(head : Node)
{
if(head==null){
println(" Node Nodes")
}
else{
var current = head
while (current.next!=null)
{
println(current.data.toString())
current= current?.next!!
}
}
}
fun main() {
for (i in 1..5){
insert(i)
}
print(head)
}
生成的输出:节点(数据=1,下一个=节点(数据=2,下一个=节点(数据=3,下一个=节点(数据=4,下一个=节点(数据=5,下一个=空(
((((预期输出:1 2 3 4 5
哇,起初我不明白发生了什么,但现在我知道你的代码有可怕且难以检测的错误!
关键是,您实际上并没有调用print
方法!您调用Kotlin
的全局泛型print
方法,该方法只是打印head.toString()
这是为什么?因为您的print
方法需要不可为空的参数,而您的head
变量的类型为Node?
。正因为如此,Kotlin 没有将调用与您的方法匹配,而是与接受可为空参数的库方法匹配。
您必须更改方法签名,使其接受Node?
参数:
fun print(head : Node?) {
...
}
然后,您需要在方法中进行适当的更改。
附带说明一下,您的实现有一个错误,只会打印2 3 4 5;)
您应该了解有关数据类的更多信息。
数据类是指仅包含字段和用于访问它们的 crud 方法(getter 和 setter(的类。这些只是其他类使用的数据的容器。这些类不包含任何其他功能,并且不能独立操作它们拥有的数据。
这是那篇文章的链接,试试这个 https://android.jlelse.eu/kotlin-for-android-developers-data-class-c2ad51a32844