如何读取用户输入的整数作为Kotlin for循环的区间范围参数
问题解决:Kotlin读取输入整数作为for循环区间参数
原代码报错的核心原因是:readLine() 方法返回的是可空字符串类型 String?,既没有做非空处理,也没有转换为整数类型,而 Kotlin 的整数区间 1..n 要求边界必须为整数类型,类型不匹配导致无法运行。
场景1:刷题/输入内容固定合法的场景
直接对输入做非空断言后转换为整数即可,代码如下:
fun main() { // 修复:读取输入后先做非空断言,再转换为Int类型 val n = readLine()!!.toInt() for (i in 1..n) { val (a, b) = readLine()!!.split(' ') println(a.toInt() + b.toInt()) } }
场景2:生产环境/输入可能非法的场景
增加空值校验和格式校验,避免崩溃:
fun main() { // 校验输入的n是否为合法整数 val n = readLine()?.toIntOrNull() ?: run { println("输入的循环次数不是合法整数") return } // 也可以用repeat代替1..n的for循环,写法更简洁 repeat(n) { val inputLine = readLine() ?: return@repeat val numParts = inputLine.split(' ') if (numParts.size < 2) return@repeat val a = numParts[0].toIntOrNull() ?: return@repeat val b = numParts[1].toIntOrNull() ?: return@repeat println(a + b) } }
Kotlin 作为强类型语言,不会隐式完成字符串到整数的类型转换,同时可空类型必须先处理空安全问题,才能参与后续运算,两步处理完成后就可以正常作为区间参数使用。
内容的提问来源于stack exchange,提问作者rumynoff
相关产品推荐
相关产品推荐

