Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 计算家庭树的所有成员_Kotlin_Family Tree - Fatal编程技术网

Kotlin 计算家庭树的所有成员

Kotlin 计算家庭树的所有成员,kotlin,family-tree,Kotlin,Family Tree,我正在Kotlin的第一个项目中工作——FamilyTree。 我有一个类Person,它包含字段:“姓名”、“年龄”、“母亲”、“父亲”和“兄弟姐妹”数组。初始化所有成员后,现在我必须计算所有成员,这是我的问题 让我们简单一点:忘掉兄弟姐妹,只有父亲和母亲。考虑到所有成员都通过其母亲、父亲的链接连接,我认为最好的决定是使用递归函数。我正在检查我是否有母亲如果我有一个-我增加计数器,检查她是否有母亲如果她有-我增加计数器,检查她母亲是否有母亲如果她母亲有父亲。。。做一些二叉树搜索。其代码如下:

我正在Kotlin的第一个项目中工作——FamilyTree。 我有一个类Person,它包含字段:“姓名”、“年龄”、“母亲”、“父亲”和“兄弟姐妹”数组。初始化所有成员后,现在我必须计算所有成员,这是我的问题

让我们简单一点:忘掉兄弟姐妹,只有父亲和母亲。考虑到所有成员都通过其母亲、父亲的链接连接,我认为最好的决定是使用递归函数。我正在检查我是否有母亲如果我有一个-我增加计数器,检查她是否有母亲如果她有-我增加计数器,检查她母亲是否有母亲如果她母亲有父亲。。。做一些二叉树搜索。其代码如下:

class Person(...) {    
  var amountOfAllRelatives = 0

    fun countAmountOfAllRelatives() {
        this.mother?.let {
            amountOfAllRelatives++
            it.countAmountOfAllRelatives()
        }
        this.father?.let {
            amountOfAllRelatives++
            it.countAmountOfAllRelatives()
        }
        this.siblings?.let {
            it.forEach {
                amountOfAllRelatives++
                it.countAmountOfAllRelatives()
            }
        }
    }
}
它不起作用-每次结果都是0,因为每次我调用函数“CountOfAllRelatives”,它都会使计数器为空

我创建了一个伴生对象,将每个新人添加到列表中,这样很容易计算,但这不是正确的解决方案,因为这个列表不是实例的一部分,而是类的一部分

我想我可以用循环来解决这个问题,写起来很简单,但读起来不容易。也许你们可以提示我如何用递归修复函数

我在Github上添加了项目的这一部分:


谢谢你抽出时间,祝你今天愉快

问题已解决:如果要将所有成员添加到一个列表或对其进行计数,则应在实例上使用参数链接调用此函数

class Person(...) { 

var amountOfAllRelatives = 0
var listOfRelatives: MutableList<Person> = mutableListOf<Person>()

fun createListRelativesOf(person: Person) {
    //tree traversal, form a list of all relatives and counting of them
    this.mother?.let {
        person.listOfRelatives.add(it)
        person.amountOfAllRelatives++
        it.createListRelativesOf(person)
    }
    this.father?.let {
        person.listOfRelatives.add(it)
        person.amountOfAllRelatives++
        it.createListRelativesOf(person)
    }
    this.siblings?.let {
        it.forEach {
            person.listOfRelatives.add(it)
            person.amountOfAllRelatives++
            it.createListRelativesOf(person)
        }
    }
}

}
类人(…){
var Amounta=0
var listOfRelatives:MutableList=mutableListOf()
趣味CreateListRelativeof(个人:个人){
//树遍历,形成所有亲属的列表,并对其进行计数
这个,妈妈?让我来{
person.listOfRelatives.add(它)
个人、亲属++
it.createListRelativeof(个人)
}
这个,爸爸?,让我来{
person.listOfRelatives.add(它)
个人、亲属++
it.createListRelativeof(个人)
}
这个,兄弟姐妹?,让我来{
这是forEach{
person.listOfRelatives.add(它)
个人、亲属++
it.createListRelativeof(个人)
}
}
}
}
我还将提交Github项目中的更改