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

简介: 一、下面我们就来开发一个基于命令行的计算器 新建一个counter.kt文件package net.println.kotlin.

一、下面我们就来开发一个基于命令行的计算器
新建一个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
感谢您使用了熊本同学的计算器

是不是很赞!

目录
相关文章
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
89 0
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习Fragment
android开发,使用kotlin学习Fragment
46 0
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习WorkManager
android开发,使用kotlin学习WorkManager
46 0
|
4月前
|
缓存 Android开发 数据安全/隐私保护
android开发,使用kotlin学习HTTP访问网络
android开发,使用kotlin学习HTTP访问网络
68 0
|
4月前
|
消息中间件 缓存 安全
android开发,使用kotlin学习消息机制Handler
android开发,使用kotlin学习消息机制Handler
76 0
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习滚动控件RecyclerView
android开发,使用kotlin学习滚动控件RecyclerView
36 0
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习Service
android开发,使用kotlin学习Service
40 1
|
4月前
|
SQL API 数据库
android开发,使用kotlin学习Room
android开发,使用kotlin学习Room
44 0
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习LiveData
android开发,使用kotlin学习LiveData
47 1
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习Lifecycles
android开发,使用kotlin学习Lifecycles
33 0