You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 01:00:01