Kotlin实现计算器功能
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实现计算器功能相关推荐
- android实现计算器功能吗,利用Android实现一个简单的计算器功能
利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...
- python表达式计算器_Python正则表达式实现简易计算器功能示例
本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...
- 使用jquery实现的计算器功能
晚上做了一个jQuery的项目,使用jQuery实现了一个简单的计算器功能,可以实现连加,连减,混合计算,括号内优先计算,代码如下: css部分: 1 <style> 2 .main{ 3 ...
- python实现简单计算器功能键介绍_Python实现的简单计算器功能详解
本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...
- java swing实现计算器_Java swing实现的计算器功能完整实例
本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...
- python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能
本文实例为大家分享了40行Python代码实现计算器功能,供大家参考,具体内容如下 偶尔用脚本写点东西也是不错的. 效果图 代码 from tkinter import * reset=True de ...
- formula 返回list_python正则实现计算器功能
本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- # Author :Gogh # @Time :2017/12/ ...
- java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
jsp 和 javaBean 实现计算器功能 try { calculator.calculate(); } catch (Exception e) { out.write(e.getMessage( ...
- 用统计功能计算机计算js,js实现计算器功能
本文实例为大家分享了js实现计算器功能的具体代码,供大家参考,具体内容如下 知识点 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 代码如下 js计算器 计算器 .h ...
最新文章
- 面试:高频面试题:如何保证缓存与数据库的双写一致性?
- android 服务器异步回调,android – 如何从异步任务返回结果
- linux默认csh修改命令,Solaris中默认Shell的修改以及命令行补全的设置
- redis的主从数据库复制功能
- 博客园上海地区活动——LinkCoder主题社区第二期:淘宝服务化架构的设计和实践...
- python特征数据类型及常用操作对比_更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!...
- mysql重复添加计数_从MySQL中的单个列获取重复值的计数?
- Python图像的基本操作
- 好消息!电商工具箱API详情接口,更全面
- 软件测试工程师必须要了解的4个证书
- nyoj112指数运算
- css3 模糊渐变,css3实现背景色渐变linear-gradient()
- html2canvas 截图丢失部分元素的问题
- sulley里面Pcapy模块安装容易出错地方
- 新农慕课python答案、第七周_优学院《作业治疗》完整答案中国大学慕课《农作学》课后作业参考答案...
- Linux 终端特殊符号含义大全
- jQuery点击图片来回切换功能
- 【技术科普二】石墨烯技术有什么特点和优势?
- 项目总结与复盘的12条“秘诀”!看完还怕做不好项目管理?
- a的b次方对p取模 a乘b对p取模 快速幂
热门文章
- 什么是sku 什么是spu
- vue单元测试SyntaxError: Unexpected token ‘export‘
- CSAPP实验二:二进制炸弹(Bomb Lab)
- linux禁止系统休眠,linux – 防止系统进入休眠/暂停 – Xviewer...
- 盘点 | CES2023落幕!新能源车、显示技术、AI/元宇宙、芯片…百花齐放百家争鸣中……
- 2015 上海邀请赛c题 calculator hdu5238
- 人人站 CMSv1.4.2 已更新,安全升级与功能修复
- Python 人工智能入门须知
- 时序逻辑电路设计方法和步骤
- Java 获取姓氏并获取姓氏的笔画数