当前位置: 首页 > news >正文

用 Kotlin 编写四则运算计算器:从零开始的简单教程

人不走空

                                                                      

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

目录

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

为什么选择 Kotlin?

需求分析 📝

实现步骤 🚀

1. 设置输入循环

2. 输入第一个数字

3. 输入运算符

4. 输入第二个数字

5. 执行计算并显示结果

完整代码 🌟

小结 ✨

作者其他作品:



 

在现代编程中,掌握一门编程语言的基础知识至关重要。今天我们将通过一个简单的项目——编写一个四则运算计算器,来学习和实践 Kotlin 语言的基础。这个项目不仅适合初学者,还可以帮助你巩固对 Kotlin 基本语法的理解。准备好了吗?让我们开始吧!

为什么选择 Kotlin?

Kotlin 是一种现代、简洁且强大的编程语言,兼容 Java,并在 Android 开发中广泛使用。其简洁的语法和丰富的功能使得它成为开发各种应用程序的理想选择。从简单的计算器程序入手,可以帮助你快速上手 Kotlin。

需求分析 📝

我们要实现的计算器需要具备以下功能:

  1. 提示用户输入第一个数字。
  2. 提示用户输入运算符(+、-、*、/)。
  3. 提示用户输入第二个数字。
  4. 根据用户输入的运算符,进行相应的四则运算。
  5. 显示计算结果。
实现步骤 🚀

让我们一步一步来实现这个计算器。

1. 设置输入循环

首先,我们需要一个循环来不断接受用户的输入,这样用户可以进行多次计算。

fun main() {while (true) {// 后续代码将在这里编写}
}

2. 输入第一个数字

提示用户输入第一个数字,并将其转换为 Double 类型。如果输入无效,提示重新输入。

print("请输入第一个数字: ")
val num1 = readLine()?.toDoubleOrNull()
if (num1 == null) {println("输入无效,请输入一个数字。")continue
}

3. 输入运算符

提示用户输入运算符,并验证输入是否合法。

print("请输入运算符 (+, -, *, /): ")
val operator = readLine()
if (operator != "+" && operator != "-" && operator != "*" && operator != "/") {println("输入无效,请输入一个有效的运算符。")continue
}

4. 输入第二个数字

提示用户输入第二个数字,并将其转换为 Double 类型。如果输入无效,提示重新输入。

print("请输入第二个数字: ")
val num2 = readLine()?.toDoubleOrNull()
if (num2 == null) {println("输入无效,请输入一个数字。")continue
}
5. 执行计算并显示结果

根据用户输入的运算符,使用 when 表达式进行相应的运算,并显示结果。如果遇到除数为 0 的情况,提示错误信息。

val result = when (operator) {"+" -> num1 + num2"-" -> num1 - num2"*" -> num1 * num2"/" -> if (num2 != 0.0) num1 / num2 else {println("错误: 除数不能为0")continue}else -> null
}if (result != null) {println("结果: $num1 $operator $num2 = $result")
} else {println("无效的运算。")
}
完整代码 🌟

将上述各部分代码组合在一起,我们就得到了一个完整的四则运算计算器程序:

fun main() {while (true) {print("请输入第一个数字: ")val num1 = readLine()?.toDoubleOrNull()if (num1 == null) {println("输入无效,请输入一个数字。")continue}print("请输入运算符 (+, -, *, /): ")val operator = readLine()if (operator != "+" && operator != "-" && operator != "*" && operator != "/") {println("输入无效,请输入一个有效的运算符。")continue}print("请输入第二个数字: ")val num2 = readLine()?.toDoubleOrNull()if (num2 == null) {println("输入无效,请输入一个数字。")continue}val result = when (operator) {"+" -> num1 + num2"-" -> num1 - num2"*" -> num1 * num2"/" -> if (num2 != 0.0) num1 / num2 else {println("错误: 除数不能为0")continue}else -> null}if (result != null) {println("结果: $num1 $operator $num2 = $result")} else {println("无效的运算。")}}
}
小结 ✨

通过这个项目,我们学习了如何在 Kotlin 中处理用户输入、进行基本的算术运算、使用 when 表达式进行条件判断,以及如何使用循环来实现连续的用户交互。这些都是 Kotlin 编程的基本技巧,掌握这些技巧将为你进一步学习和开发打下坚实的基础。

你还在等什么?快打开你的 Kotlin 编译器,试试这个简单而有趣的项目吧!如果你在过程中遇到任何问题,欢迎在评论区留言,我们一起探讨解决。Happy coding! 🎉


作者其他作品:

【Java】Spring循环依赖:原因与解决方法

OpenAI Sora来了,视频生成领域的GPT-4时代来了

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

【Java】深入理解Java中的static关键字

[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读

了解 Java 中的 AtomicInteger 类

算法题 — 整数转二进制,查找其中1的数量

深入理解MySQL事务特性:保证数据完整性与一致性

Java企业应用软件系统架构演变史 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构(2)
  • 单目测距 单目相机测距 图片像素坐标转实际坐标的一种转换方案
  • MySQL中记录(Documents)的基本操作——添加记录和查找记录
  • 树莓派+攀腾PMSA003-PM2.5传感器监测空气质量【含源码+接线图】
  • Navicat 17 新特性 | 原生支持 Linux ARM 平台以及银河麒麟和统信操作系统
  • 应变与几何方程——弹性力学
  • Kithara与OpenCV (一)
  • IDEA中使用Maven打包及碰到的问题
  • android 固定图片大小
  • vue3 身份证校验、识别性别/生日/年龄
  • MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析
  • 如何找回误删的文件?4个常用文件恢复方法!
  • 『C++成长记』vector模拟实现
  • RequestContextHolder多线程获取不到request对象
  • 基于springboot+vue+uniapp的机电公司管理信息系统
  • 2018一半小结一波
  • flutter的key在widget list的作用以及必要性
  • Java多线程(4):使用线程池执行定时任务
  • JS笔记四:作用域、变量(函数)提升
  • Koa2 之文件上传下载
  • laravel5.5 视图共享数据
  • Lucene解析 - 基本概念
  • React组件设计模式(一)
  • vue-cli3搭建项目
  • vue数据传递--我有特殊的实现技巧
  • 目录与文件属性:编写ls
  • 问题之ssh中Host key verification failed的解决
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #{} 和 ${}区别
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #if #elif #endif
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(五)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (CPU/GPU)粒子继承贴图颜色发射
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (笔记)M1使用hombrew安装qemu
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (第一天)包装对象、作用域、创建对象
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (汇总)os模块以及shutil模块对文件的操作
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)库存超卖案例实战——优化redis分布式锁
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)IOS中获取各种文件的目录路径的方法
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET 回调、接口回调、 委托
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net/c# memcached 获取所有缓存键(keys)