Kotlin如何读取长度未定数字序列并输出最大值及首次出现位置
代码问题汇总
- 仅在循环外读取了一次输入数字,循环内部没有调用
scan.nextInt()读取新的数字,会导致一直重复比对同一个初始数值,后续输入完全没有被处理,还会触发死循环。 - 循环判断条件使用
scan.hasNext()不够严谨,你要读取的是Int类型数字,应该用scan.hasNextInt()判断,否则输入中出现非Int类型内容时,读取操作会直接抛出异常。 - 没有处理空输入的边界场景:如果用户没有输入任何数字,初始的
scan.nextInt()会直接抛出NoSuchElementException,最终输出的max也会是无意义的Int.MIN_VALUE。
修正后的代码
import java.util.Scanner fun main() { val scan = Scanner(System.`in`) var max = Int.MIN_VALUE var pos = 0 var i = 1 // 每次循环前先判断是否还有Int输入 while (scan.hasNextInt()) { val num = scan.nextInt() if (num > max) { max = num pos = i } i++ } // 无有效输入的提示逻辑,可根据需求自行调整 if (pos == 0) { println("未输入任何有效数字") } else { println("$max $pos") } }
修正说明
- 调整为while循环,每次进入循环前先判断是否还有整数输入,避免空输入报错。
- 把数字读取逻辑放到循环内部,每次迭代都读取新的输入数值。
- 增加空输入判断逻辑,避免输出无意义的结果。
内容的提问来源于stack exchange,提问作者SG007
相关产品推荐
相关产品推荐

