Kotlin:使用Kotlin开发一个命令行计算器

时间:2022-09-09 20:08:36

一、下面我们就来开发一个基于命令行的计算器
新建一个counter.kt文件

package net.println.kotlin.chapters

/** * @author:wangdong * @description:使用kotlin开发一个命令行计数器 */

fun main(args: Array<String>) {
    while (true) {
        try {
            println("请输入算式,例如: 3 + 4,用空格隔开")
            //从命令行读取,如果读到的null,直接break
            val input = readLine() ?: break
            //读取结果可能为空。所以要作非空校验
            //用空格切割,trim去掉字符串首位的空白
            val splits = input.trim().split(" ")
            if (splits.size < 3){
                throw IllegalArgumentException("参数格数不对")
            }
            //第一个参数
            val arg1 = splits[0].toDouble()
            //第二个参数
            val op = splits[1]
            //第三个参数
            val arg2 = splits[2].toDouble()

            //将结果打印出来
            println("$arg1 $op $arg2 = ${Operator(op).apply(arg1, arg2)}")
        }catch (e: NumberFormatException){
            println("请按照正常的格式输入")
        }catch (e: IllegalArgumentException){
            println("您确定您的输入是用空格分割的吗?")
        }catch (e: Exception){
            println("您好,程序遇到了未知的错误,错误信息是${e.printStackTrace()}")
        }
        println("再来一次?[Y]")
        val cmd = readLine()
        if (cmd == null || cmd.toLowerCase() != "y") {
            break
        }
    }
    //用户退出后,需要感谢用户的使用
    println("感谢您使用了熊本同学的计算器")
}
/**定义一个类*/
class Operator(op: String){
    //定义一个opFun,使用lambda表达式
    val opFun:(left: Double,right: Double) -> Double

    init {
        opFun = when(op){
            "+" -> {l,r -> l + r}
            "-" -> {l,r -> l - r}
            "*" -> {l,r -> l * r}
            "/" -> {l,r -> l / r}
            "%" -> {l,r -> l % r}
            else ->{
                throw UnsupportedOperationException(op)
            }
        }
    }
    //定义一个方法
    fun apply(left: Double, right: Double): Double{
        return opFun(left,right)
    }
}

输出的结果:

请输入算式,例如: 3 + 4,用空格隔开
4 + 4323
4.0 + 4323.0 = 4327.0
再来一次?[Y]
y
请输入算式,例如: 3 + 4,用空格隔开
431 * 323
431.0 * 323.0 = 139213.0
再来一次?[Y]
y
请输入算式,例如: 3 + 4,用空格隔开
41 +2
您确定您的输入是用空格分割的吗?
再来一次?[Y]
y
请输入算式,例如: 3 + 4,用空格隔开
7 ** 22
java.lang.UnsupportedOperationException: **
    at net.println.kotlin.chapters.Operator.<init>(counter.kt:58)
    at net.println.kotlin.chapters.CounterKt.main(counter.kt:28)
您好,程序遇到了未知的错误,错误信息是kotlin.Unit
再来一次?[Y]
n
感谢您使用了熊本同学的计算器

是不是很赞!