Kotlin代码中else if语句不执行、空输入未触发对应分支问题求助
代码错误原因
readLine()读取用户输入时会自动丢弃末尾的换行符,你直接回车不输入内容的话,返回值是空字符串"",不是"\n",所以你的空值判断条件完全不生效。- 分支逻辑结构错误,你写的
else后面没有加花括号包裹所有校验逻辑,所以只有第一个firstname的判断属于上层if的else分支,lastname的判断是完全独立的代码,无论上层if是否满足都会执行,同时你的判断也没有覆盖prefix为空的场景。 - 大量滥用
!!强制解包可空类型,只要任意输入为null(比如终端触发输入终止信号),代码会直接抛出空指针异常崩溃。
修正后的参考代码
fun main(){ print("Enter First Name: ") val firstname: String? = readLine()?.trim() // trim可处理用户误输入的前后空格 print("Enter Last Name: ") val lastname: String? = readLine()?.trim() print("Prefix (Ms/Mr/Mrs)?: ") var prefix: String? = readLine()?.trim() // 先做非空校验再处理前缀的点号 if (!prefix.isNullOrEmpty() && prefix.contains(".")){ prefix = prefix.substring(0, prefix.length - 1) } // 逐个字段校验,提示逻辑更清晰 when { firstname.isNullOrEmpty() -> println("The First Name field is empty. Re-run the program to try again.") lastname.isNullOrEmpty() -> println("The Last Name field is empty. Re-run the program to try again.") prefix.isNullOrEmpty() -> println("The Prefix field is empty. Re-run the program to try again.") else -> println(Applicant(firstname, lastname, prefix).message) } }
内容的提问来源于stack exchange,提问作者cheese
相关产品推荐
相关产品推荐

