Kotlin出现unresolved reference: fakultaet错误,求问题排查与解决
解决Kotlin中"unresolved reference: fakultaet"错误
错误原因很明确:你在main函数内部先调用了fakultaet函数,但函数定义写在了调用语句的后面。Kotlin对局部函数(嵌套在其他函数内的函数)的要求是必须先定义,再调用,编译器执行到println(fakultaet(...))时,还未识别到fakultaet的存在,因此抛出未解析引用错误。
修复方案一:将函数改为顶层函数
把fakultaet移到main函数外部,作为顶层函数,这样编译器在整个文件范围内都能识别它:
fun fakultaet(value: Int): Int { var zaehler = 2 var ergebnis = 1 val fakultaetVon = value while(zaehler <= fakultaetVon) { ergebnis = ergebnis * zaehler zaehler = zaehler + 1 } return ergebnis } fun main(args: Array<String>) { if(args.size == 1 && args[0].toIntOrNull() != null) { println(fakultaet(args[0].toInt())) } else { println("Bitte Ganzzahl als Parameter eingeben") } }
修复方案二:调整局部函数的定义位置
如果希望fakultaet仅在main内部可用,只需把它的定义移到调用语句之前即可:
fun main(args: Array<String>) { fun fakultaet(value: Int): Int { var zaehler = 2 var ergebnis = 1 val fakultaetVon = value while(zaehler <= fakultaetVon) { ergebnis = ergebnis * zaehler zaehler = zaehler + 1 } return ergebnis } if(args.size == 1 && args[0].toIntOrNull() != null) { println(fakultaet(args[0].toInt())) } else { println("Bitte Ganzzahl als Parameter eingeben") } }
额外说明
你的阶乘逻辑已经能正确处理0和1的情况(传入0或1时,循环不会执行,直接返回1,符合0! = 1! = 1的数学定义),无需额外修改。如果需要更简洁的实现,也可以用递归写法,但当前的循环实现已经足够高效。
内容的提问来源于stack exchange,提问作者Paul Schmiel
相关产品推荐
相关产品推荐

