Kotlin如何获取Int、Float等数值类型用户输入,替代仅返回String的readLine()方法
Kotlin 控制台读取数值类型输入的实现方案
你给出的示例代码报错有三个原因:
println"Enter your age" var age:int =readInt()
println方法的参数缺少包裹用的括号- Kotlin的整型类型名为
Int,首字母必须大写- Kotlin标准库没有提供全局默认的
readInt()顶层方法,readLine()默认返回的确实是可空String类型,需要手动做类型转换。
以下是两种常用的实现方案:
方案1:基于readLine()封装自定义工具方法
这是最推荐的Kotlin原生实现方式,可以根据需求自定义异常处理、重试逻辑:
// 读取Int输入,输入不合法时返回null fun readInt(): Int? = readLine()?.toIntOrNull() // 读取Float输入,输入不合法时返回null fun readFloat(): Float? = readLine()?.toFloatOrNull() // 读取Double输入,输入不合法时返回null fun readDouble(): Double? = readLine()?.toDoubleOrNull() // 可选:封装带重试逻辑的方法,直到用户输入合法数值为止 fun readIntWithRetry(prompt: String): Int { while (true) { println(prompt) readLine()?.toIntOrNull()?.let { return it } println("输入不合法,请输入有效整数") } }
使用示例:
fun main() { // 基础用法 println("请输入你的年龄:") val age = readInt() age?.let { println("你的年龄为$it 岁") } ?: println("年龄输入无效") // 带重试的用法 val score = readIntWithRetry("请输入考试分数:") println("你输入的分数为$score") }
方案2:调用Java的Scanner类实现
如果习惯Java的API用法,也可以直接用Scanner类读取数值:
import java.util.Scanner fun main() { val scanner = Scanner(System.`in`) println("请输入你的年龄:") val age: Int = scanner.nextInt() println("请输入你的身高(单位:米):") val height: Float = scanner.nextFloat() println("年龄:$age,身高:$height 米") }
注意:使用Scanner的数值读取方法时,如果输入和目标类型不匹配,会抛出InputMismatchException,建议搭配try-catch做异常捕获,避免程序直接崩溃
内容的提问来源于stack exchange,提问作者Kareem Mohamed
相关产品推荐
相关产品推荐

