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

Kotlin开发(三):编程趣事,变量、判断和循环的三角恋

引言

有没有那么一段代码,让你越写越上头?从数据类型到条件判断,再到循环控制,每个编程语言都能凭这仨基础概念搅动江湖,而 Kotlin,简直是高手中的高手。这篇文章,就是为让你深刻体会“基础即王道”的真谛。今天我们聊聊 Kotlin 的基本功,为什么选它?因为 Kotlin 好用到“香疯了”!掌握它,Android 开发、后端构建、甚至日常脚本都如鱼得水。来吧,别犹豫了,进入 Kotlin 的奇妙世界,写代码快乐得像追剧!
在这里插入图片描述


一、背景

Kotlin 是 2017 年 Google 官方认证的 Android 开发语言,自发布以来,它凭借简洁高效的语法设计、一流的安全性和完全的 JVM 兼容性,迅速风靡开发界。它不仅能写 Android 应用,还能用于后端开发、Web 开发,甚至是数据科学,实在是一把开发界的“瑞士军刀”。而 Kotlin 中的基本数据类型、条件控制和循环控制,则是它这把“刀”的锋刃部分。不熟悉这些,就像厨师不会用刀,写代码哪能顺手?


二、Kotlin

1. 数据类型
Kotlin 语言的基本数据类型分为可空和不可空两类,常见的有 Int、Float、Double、Boolean 等。你可以通过类型推断省略声明,代码从此更优雅。

2. 条件控制
条件判断用 if-elsewhen 表达式。when 是 Kotlin 中的杀手锏,比 Java 的 switch 更灵活,甚至可以当替代变量赋值语句用。

3. 循环控制
forwhile,再到 do-while,每一种都有自己独特的适用场景。同时,for 配合 ranges (..) 更像魔法,轻松操作区间。


三、实现

环境准备
  1. 下载并安装 IntelliJ IDEA。
  2. 配置 Kotlin 插件(通常默认自带)。
  3. 创建 Kotlin 项目,选择 JVM 环境即可。

四、实例

案例一:计算器

需求:实现一个简单的四则运算计算器,支持加减乘除。

fun main() {
    println("请输入两个数字和一个操作符(+,-,*,/):")
    val num1 = readLine()!!.toDouble()
    val operator = readLine()!!
    val num2 = readLine()!!.toDouble()
    
    val result = when (operator) {
        "+" -> num1 + num2
        "-" -> num1 - num2
        "*" -> num1 * num2
        "/" -> if (num2 != 0.0) num1 / num2 else "除数不能为零"
        else -> "无效操作符"
    }
    println("计算结果是:$result")
}
案例二:用户登录模拟

需求:设计一个简单的登录验证程序。

fun main() {
    val users = mapOf("admin" to "1234", "user" to "abcd")
    println("请输入用户名:")
    val username = readLine()!!
    println("请输入密码:")
    val password = readLine()!!

    if (users[username] == password) {
        println("登录成功!欢迎 $username")
    } else {
        println("用户名或密码错误!")
    }
}
案例三:九九乘法表

需求:打印标准九九乘法表。

fun main() {
    for (i in 1..9) {
        for (j in 1..i) {
            print("$j * $i = ${i * j}\t")
        }
        println()
    }
}
案例四:随机抽奖程序

需求:实现一个随机抽奖程序,从一组参与者中随机抽取获奖者,并支持多次抽奖。

代码实现

fun main() {
    val participants = listOf("Alice", "Bob", "Charlie", "Diana", "Ethan")
    println("参与抽奖的人员:$participants")
    println("请输入要抽取的奖项数量:")
    val numWinners = readLine()!!.toInt()

    if (numWinners <= participants.size) {
        val winners = participants.shuffled().take(numWinners)
        println("恭喜获奖者:$winners")
    } else {
        println("奖项数量不能超过参与人数!")
    }
}

实现过程

  1. 使用 listOf 创建参与者列表。
  2. 使用 shuffled 方法随机打乱列表顺序。
  3. take(n) 选择前 n 个随机获奖者。

案例五:商品购物车系统

需求:开发一个简单的购物车程序,支持添加商品、查看购物车以及结算功能。

代码实现

fun main() {
    val cart = mutableMapOf<String, Int>()
    while (true) {
        println("\n请选择操作:1. 添加商品 2. 查看购物车 3. 结算并退出")
        when (readLine()!!.toInt()) {
            1 -> {
                println("请输入商品名称:")
                val product = readLine()!!
                println("请输入商品数量:")
                val quantity = readLine()!!.toInt()
                cart[product] = cart.getOrDefault(product, 0) + quantity
                println("$product 已添加到购物车!")
            }
            2 -> {
                println("购物车内容:")
                if (cart.isEmpty()) {
                    println("购物车为空!")
                } else {
                    cart.forEach { (product, quantity) ->
                        println("$product x $quantity")
                    }
                }
            }
            3 -> {
                println("结算中...")
                val totalItems = cart.values.sum()
                println("共购买 $totalItems 件商品,感谢购物!")
                break
            }
            else -> println("无效选择,请重新输入!")
        }
    }
}

实现过程

  1. 使用 mutableMapOf 保存商品及其数量。
  2. 通过 getOrDefault 方法更新商品数量。
  3. 提供菜单选项,让用户动态操作购物车内容。

案例六:天气查询模拟器

需求:模拟天气查询系统,用户输入城市名,返回该城市的天气信息(模拟数据)。

代码实现

fun main() {
    val weatherData = mapOf(
        "Beijing" to "晴天,气温 15°C",
        "Shanghai" to "小雨,气温 18°C",
        "Guangzhou" to "多云,气温 22°C",
        "Shenzhen" to "晴转多云,气温 24°C"
    )
    println("请输入城市名称(如 Beijing, Shanghai):")
    val city = readLine()!!

    val weather = weatherData[city]
    if (weather != null) {
        println("【$city】的天气情况:$weather")
    } else {
        println("抱歉,暂未收录【$city】的天气信息。")
    }
}

实现过程

  1. 使用 mapOf 存储城市与天气的对应关系。
  2. 用户输入城市名,通过 map 直接查询结果。
  3. 提供未收录城市的处理逻辑,确保程序健壮性。

实现总结

这几个项目从实用工具到娱乐程序,涵盖了不同的开发场景。通过这些案例,你可以体验到 Kotlin 的简洁性和高效性。代码已优化,直接复制到 Kotlin 编译器中即可运行,适合初学者和进阶开发者上手练习!

五、避坑

  1. 空指针异常:Kotlin 强调空安全,避免不必要的空指针问题,但不要忘了用 ?!! 明确空值。
  2. when 条件未覆盖:记得提供默认分支 else,避免运行时出错。
  3. 循环溢出:确保使用合适的数据范围,比如 1..100

六、未来

Kotlin 的未来无疑光明:不仅 Android 全面支持,连多平台编译也在逐步完善。同时,Kotlin Native 和 Kotlin Multiplatform 也带来跨平台开发的可能性,进一步释放开发者的创造力。


总结

Kotlin 就像一杯好茶,初尝觉得简单,细品才发现层次分明。这篇文章从基础开始,带你了解 Kotlin 的核心功能,希望能让你在开发中更加游刃有余。快去试试吧,用 Kotlin 写出自己喜欢的项目!


参考资料

  1. 《Kotlin in Action》
  2. JetBrains 官方文档
  3. CSDN 技术博客

欢迎关注GongZhongHao,码农的乌托邦,程序员的精神家园!


http://www.kler.cn/a/518128.html

相关文章:

  • 目标跟踪之sort算法(3)
  • 【数据结构】_链表经典算法OJ:环形链表的约瑟夫问题
  • 消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)
  • 统计学中的样本概率论中的样本
  • 解决双系统引导问题:Ubuntu 启动时不显示 Windows 选项的处理方法
  • AI赋能医疗:智慧医疗系统源码与互联网医院APP的核心技术剖析
  • C++ 复习总结记录十
  • transformers报错:‘GenerationConfig‘ object has no attribute ‘_eos_token_tensor‘
  • INCOSE需求编写指南-第1部分:介绍
  • 基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】
  • 【GO】Context
  • 亚博microros小车-原生ubuntu支持系列:11手指控制与手势识别
  • 活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!
  • Queries Acceleration -Tuning- Tuning Execution 学习笔记
  • 在Android中通过JNI实现Java与C++的交互:Hello World示例
  • C++中static和const的区别和用法
  • leetcode——相交链表(java)
  • Spring Boot - 数据库集成02 - 集成JPA
  • DSP实验七 综合实验与考查
  • 数据库之PostgreSQL详解
  • 构建基于知识图谱的语义化问答系统
  • ray.rllib 入门实践-2:配置算法
  • Lua 初级教程
  • Android BitmapShader简洁实现马赛克,Kotlin(二)
  • Java设计模式 三十 状态模式 + 策略模式
  • ProfiNet转CANopen应用于汽车总装生产线输送设备ProfiNet与草棚CANopen质量检测系统