为何Kotlin代码中Random.nextInt(0,4)首次迭代仅返回值3?
问题解答:随机红绿灯首次输出无效的原因
你碰到的不是“首次迭代只会返回3”,只是25%的概率会随机到3,刚好你多次尝试中碰到了这个情况而已,本质是代码的变量初始化逻辑有问题。
你的代码里trafficLightColor是在循环外部初始化的空字符串:
var trafficLightColor: String = "";
当第一次迭代随机到3的时候,前三个if/else if分支都不会触发,这个变量会保持初始的空值。后续判断时,空字符串转小写后既不匹配red、yellow也不匹配green,自然就进入else分支输出“Invalid traffic-light color”了。
要解决这个问题,有两种思路:
- 把
trafficLightColor的初始化移到循环内部,每次迭代都重置变量 - 给随机到3的情况也设置一个默认值
用Kotlin更简洁的when表达式改写后的代码示例:
fun main() { List(50) { val randomNumber = kotlin.random.Random.nextInt(0, 4) val trafficLightColor = when(randomNumber) { 0 -> "Red" 1 -> "Yellow" 2 -> "Green" else -> "Unknown" } when(trafficLightColor.lowercase()) { "red" -> println("Stop") "yellow" -> println("Slow") "green" -> println("Go") else -> println("Invalid traffic-light color") } } }
这样每次迭代都会重新生成trafficLightColor,不会受上一次迭代的变量值影响,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Patrick Dark
相关产品推荐
相关产品推荐

