You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin编写简易计算器时readLine()相关减乘除运算报错求解

Kotlin 计算器 readLine 输入运算报错排查

核心报错原因

你的代码触发减/乘/除运算报错、加法逻辑异常的根源是类型不匹配:

  • readLine() 方法的返回值是可空字符串类型String?,你读取到choosen、num1、num2三个变量后,没有将字符串转为数值类型就直接执行运算
  • Kotlin中+运算符支持字符串拼接,所以加法分支不会报语法错误,但实际执行的是字符串拼接而非数值相加:比如输入数字1和2,加法分支会输出拼接结果12,不是正确的计算结果3
  • 减、乘、除三个运算符没有字符串类型的重载实现,直接对字符串类型调用-/*//会直接触发编译/运行时错误
  • 额外隐患:直接调用toInt()转换时,如果用户输入非数字内容、或者输入流异常返回null,会触发数字格式异常、空指针异常导致程序崩溃

修正后可运行代码

fun main() {
    print("1. Addition\n2. Subtraction\n3. Multiplication\n4. Division\nChoose Number: ")
    // 读取操作选项,输入非合法数字时兜底为-1走错误提示分支
    val choosen = readLine()?.toIntOrNull() ?: -1

    print("Enter The First Number: ")
    // 读取第一个运算数,支持小数输入,非法输入兜底为0
    val num1 = readLine()?.toDoubleOrNull() ?: 0.0

    print("Enter The Second Number: ")
    // 读取第二个运算数
    val num2 = readLine()?.toDoubleOrNull() ?: 0.0

    val result = when(choosen) {
        1 -> num1 + num2
        2 -> num1 - num2
        3 -> num1 * num2
        4 -> {
            // 额外处理除零异常
            if (num2 == 0.0) {
                print("Error: Cannot divide by zero")
                return
            }
            num1 / num2
        }
        else -> {
            print("Wrong Input")
            return
        }
    }
    print("The Result Is: $result")
}

修正点说明

  • 用toIntOrNull()/toDoubleOrNull()替代强制toInt()转换,输入非数字内容时不会直接崩溃,走预设的兜底逻辑
  • 所有运算基于数值类型执行,修正了原加法分支字符串拼接的逻辑错误
  • 采用val修饰赋值后不再修改的变量,符合Kotlin只读变量优先的编码规范
  • 用when表达式替代多层else if判断,分支逻辑更清晰易维护
  • 新增除零判断逻辑,避免除法运算时除以0触发运行时异常
  • 采用Double类型接收运算数,支持小数计算,比仅支持整数的Int类型适用性更广

内容的提问来源于stack exchange,提问作者Ibrahim Al-kaladi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:39:41