Kotlin类型不匹配错误:传入String类型却期望Int类型
解决Kotlin类型不匹配:String转Int的问题
问题分析
嘿,我来帮你搞定这个报错!你这段代码的核心问题很直白:你用readLine()!!读取的用户输入是String字符串类型,但你调用的division函数要求传入的是Int整数类型参数,编译器一眼就识破了这个类型不匹配的问题,所以抛出了那两行错误提示。
先还原下你出错的代码:
fun main(args:Array<String>) { println("Enter values of c and d") var c:String= readLine()!! var d:String= readLine()!! try { division(c,d) // 这里传入String,函数要求Int,类型不匹配 } catch (e:Exception) { println("Exception Occured") e.printStackTrace() } } fun division(a:Int,b:Int){ println(a/b) }
对应的错误提示:
Error:(6, 17) Kotlin: 类型不匹配:推断类型为String,但期望的是Int
Error:(6, 19) Kotlin: 类型不匹配:推断类型为String,但期望的是Int
两种解决思路
你只需要把读取到的String类型输入转换为Int类型就行,这里给你两种常用的处理方式:
1. 直接强制转换(简单但依赖输入合法性)
如果你确定用户输入的肯定是合法整数,可以用toInt()方法直接转换。虽然你的代码已经有try-catch块能捕获转换失败的异常,但可以优化下错误提示更友好:
fun main(args:Array<String>) { println("Enter values of c and d") var c:String= readLine()!! var d:String= readLine()!! try { // 把String转成Int再传入函数 division(c.toInt(), d.toInt()) } catch (e:Exception) { println("Exception Occured: ${e.message}") // 打印具体错误信息 e.printStackTrace() } } fun division(a:Int,b:Int){ println(a/b) }
2. 安全转换(推荐,适配无效输入)
如果想避免用户输入非整数导致的崩溃,建议用toIntOrNull()方法——它在转换失败时会返回null,这样你可以提前拦截无效输入:
fun main(args:Array<String>) { println("Enter values of c and d") val c = readLine()?.toIntOrNull() val d = readLine()?.toIntOrNull() // 先判断输入是否为有效整数 if (c == null || d == null) { println("请输入有效的整数!") return } try { division(c, d) } catch (e: ArithmeticException) { // 单独捕获除零错误,更精准 println("不能除以零!") e.printStackTrace() } catch (e:Exception) { println("发生未知错误: ${e.message}") e.printStackTrace() } } fun division(a:Int,b:Int){ println(a/b) }
这种方式更健壮,既能处理用户输入非整数的情况,还能针对性捕获除零的算术异常,用户体验会好很多。
内容的提问来源于stack exchange,提问作者user8823037
相关产品推荐
相关产品推荐

