Kotlin中for循环内使用when()时后续代码未执行的问题咨询
解决Kotlin for循环中when语句后代码不执行的问题
嘿,刚接触Kotlin遇到这种问题太正常了,我来帮你分析下可能的原因和解决办法~
首先明确一点:Kotlin的when本身不会默认中断for循环的后续执行,出现你说的“when之后的代码直接跳过、进入下一次循环”,大概率是你在when的分支里用了控制流关键字,或者when没有覆盖所有分支导致抛出异常了。
常见原因1:when分支里误用了控制流关键字
比如你可能在when的某个分支里写了return、continue或者break,这些关键字会直接改变循环的执行流程:
for (num in 1..3) { when(num) { 1 -> continue // 直接跳到下一次循环,后面的println根本不会执行 2 -> return // 直接结束整个函数,循环直接终止 3 -> break // 直接跳出整个循环,后续迭代都不执行 } println("when之后的代码,num=$num") }
如果是这种情况,只需要把这些控制流关键字去掉(除非你确实需要用它们来控制流程),改成单纯的逻辑处理即可:
for (num in 1..3) { when(num) { 1 -> println("处理数字1") 2 -> println("处理数字2") 3 -> println("处理数字3") } // 现在这行代码每次循环都会执行啦 println("when之后的代码,num=$num") }
常见原因2:when没有覆盖所有分支,导致抛出异常
Kotlin的when如果作为语句使用但没有覆盖所有可能的分支且没写else,当遇到不匹配的情况时会抛出NoWhenBranchMatchedException,异常会中断当前循环迭代,直接进入下一次(或者终止程序,取决于异常处理)。
比如错误示例:
for (num in 1..3) { // 这里只处理了1和2,没处理3,也没写else when(num) { 1 -> println("处理数字1") 2 -> println("处理数字2") } println("when之后的代码,num=$num") // 当num=3时,前面的when会抛异常,这行不会执行 }
解决办法就是给when加上else分支,覆盖所有剩余情况:
for (num in 1..3) { when(num) { 1 -> println("处理数字1") 2 -> println("处理数字2") else -> println("处理其他数字:$num") // 覆盖所有未匹配的情况 } println("when之后的代码,num=$num") // 现在所有情况都会执行到这行 }
总结一下排查步骤
- 检查when的每个分支,看有没有不小心写了
return、continue、break这些控制流关键字 - 确认when的分支覆盖了所有可能的输入情况,或者添加
else分支避免抛出异常 - 如果是when作为表达式使用,确保所有分支都有返回值(或者用else兜底)
内容的提问来源于stack exchange,提问作者Hariharan Ayyasamy
相关产品推荐
相关产品推荐

