Kotlin实现计算器功能

功能介绍

  • 交互式界面,输入计算公式,按下回车,程序就会帮我们计算出结果。如输入:1+2=3
  • 输入exit,按下回车,程序就会退出。
  • 支持加减乘除这四种运算。

功能实现

定义枚举类

/*** 枚举类:定义计算符号*/
enum class Operation(val value: String) {ADD("+"),MINUS("-"),MULTI("*"),DIVI("/");
}

定义公式类

/*** 定义计算公式实体类*/
data class Expression(val left: String,val operator: Operation,val right: String
)

计算器类

/*** 计算器类*/
class Calculator {//退出指令private val EXIT = "exit"//帮助信息private val HELP = """
-------------------------------------
使用说明:
1. 输入 1 + 1,按回车,即可使用计算器;
2. 主要:数字与符号之间要有空格;
3. 想要退出程序,请输入:exit;
-------------------------------------
""".trimIndent()//开始运行计算器fun start() {while (true) {println(HELP)val input = readLine() ?: continueval result = calculate(input)if (result == null) {println("输入格式不正确")continue} else {println("$input = $result")}}}/*** 计算公式*/private fun calculate(input: String): String? {if (shouldExit(input)) exitProcess(0)val exp = parseExpression(input) ?: return nullval (left, operator, right) = expreturn when (operator) {Operation.ADD -> add(left, right)Operation.MINUS -> minus(left, right)Operation.MULTI -> multi(left, right)Operation.DIVI -> divi(left, right)}}/*** 是否必须退出*/private fun shouldExit(input: String): Boolean {return input == EXIT}/*** 解析计算公式*/private fun parseExpression(input: String): Expression? {val operator = parseOperation(input) ?: return nullval list = input.split(operator.value)if (list.size != 2) return nullreturn Expression(left = list[0].trim(), operator = operator, right = list[1].trim())}/*** 解析出计算符号*/private fun parseOperation(input: String): Operation? {Operation.values().forEach {if (input.contains(it.value)) {return it}}return null}/*** 加*/fun add(left: String, right: String): String {return (left.toLong() + right.toLong()).toString()}/*** 减*/fun minus(left: String, right: String): String {return (left.toLong() - right.toLong()).toString()}/*** 乘*/fun multi(left: String, right: String): String {return (left.toLong() * right.toLong()).toString()}/*** 除*/fun divi(left: String, right: String): String {return (left.toLong() / right.toLong()).toString()}
}

使用

fun main() {val calculator = Calculator()calculator.start()
}

兼容特大数想加

当2个特大数想加时,程序会抛出异常。

对此我们可以改造add方法:

fun add(left: String, right: String): String {val result = StringBuilder()var leftIndex = left.length - 1var rightIndex = right.length - 1var carry = 0while (leftIndex >= 0 || rightIndex >= 0) {val leftValue = if (leftIndex >= 0) left[leftIndex].digitToInt() else 0val rightValue = if (rightIndex >= 0) right[rightIndex].digitToInt() else 0val sum = leftValue + rightValue + carrycarry = sum / 10result.append(sum % 10)leftIndex--rightIndex--}if (carry != 0) {result.append(carry)}return result.reverse().toString()
}

Kotlin实现计算器功能相关推荐

  1. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  2. python表达式计算器_Python正则表达式实现简易计算器功能示例

    本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...

  3. 使用jquery实现的计算器功能

    晚上做了一个jQuery的项目,使用jQuery实现了一个简单的计算器功能,可以实现连加,连减,混合计算,括号内优先计算,代码如下: css部分: 1 <style> 2 .main{ 3 ...

  4. python实现简单计算器功能键介绍_Python实现的简单计算器功能详解

    本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...

  5. java swing实现计算器_Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...

  6. python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能

    本文实例为大家分享了40行Python代码实现计算器功能,供大家参考,具体内容如下 偶尔用脚本写点东西也是不错的. 效果图 代码 from tkinter import * reset=True de ...

  7. formula 返回list_python正则实现计算器功能

    本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- # Author :Gogh # @Time :2017/12/ ...

  8. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能

    jsp 和 javaBean 实现计算器功能 try { calculator.calculate(); } catch (Exception e) { out.write(e.getMessage( ...

  9. 用统计功能计算机计算js,js实现计算器功能

    本文实例为大家分享了js实现计算器功能的具体代码,供大家参考,具体内容如下 知识点 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 代码如下 js计算器 计算器 .h ...

最新文章

  1. 面试:高频面试题:如何保证缓存与数据库的双写一致性?
  2. android 服务器异步回调,android – 如何从异步任务返回结果
  3. linux默认csh修改命令,Solaris中默认Shell的修改以及命令行补全的设置
  4. redis的主从数据库复制功能
  5. 博客园上海地区活动——LinkCoder主题社区第二期:淘宝服务化架构的设计和实践...
  6. python特征数据类型及常用操作对比_更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!...
  7. mysql重复添加计数_从MySQL中的单个列获取重复值的计数?
  8. Python图像的基本操作
  9. 好消息!电商工具箱API详情接口,更全面
  10. 软件测试工程师必须要了解的4个证书
  11. nyoj112指数运算
  12. css3 模糊渐变,css3实现背景色渐变linear-gradient()
  13. html2canvas 截图丢失部分元素的问题
  14. sulley里面Pcapy模块安装容易出错地方
  15. 新农慕课python答案、第七周_优学院《作业治疗》完整答案中国大学慕课《农作学》课后作业参考答案...
  16. Linux 终端特殊符号含义大全
  17. jQuery点击图片来回切换功能
  18. 【技术科普二】石墨烯技术有什么特点和优势?
  19. 项目总结与复盘的12条“秘诀”!看完还怕做不好项目管理?
  20. a的b次方对p取模 a乘b对p取模 快速幂

热门文章

  1. 什么是sku 什么是spu
  2. vue单元测试SyntaxError: Unexpected token ‘export‘
  3. CSAPP实验二:二进制炸弹(Bomb Lab)
  4. linux禁止系统休眠,linux – 防止系统进入休眠/暂停 – Xviewer...
  5. 盘点 | CES2023落幕!新能源车、显示技术、AI/元宇宙、芯片…百花齐放百家争鸣中……
  6. 2015 上海邀请赛c题 calculator hdu5238
  7. 人人站 CMSv1.4.2 已更新,安全升级与功能修复
  8. Python 人工智能入门须知
  9. 时序逻辑电路设计方法和步骤
  10. Java 获取姓氏并获取姓氏的笔画数