【Kotlin】流程控制

1 选择结构

        Kotlin 中选择结构主要包含 if -else、when 语句,并且可以返回结果。

1.1 if-else

1.1. 条件选择

fun main() {
    var score = 85
    if (score >= 90) {
        println("优秀")
    } else if (score >= 80) {
        println("良好")
    } else if (score >= 60) {
        println("及格")
    } else {
        println("不及格")
    }
}

        说明:如果 {} 里只有一条语句,可以省略 {},if-else 语句可以嵌套使用,其他流程控制语句也可以嵌套使用。

1.1.2 条件返回

        if-else 语句也可以作为结果判断。

        1)单行案例

fun main() {
    var score = 85
    var res = if (score > 60) "及格" else "不及格"
}

         2)多行案例

fun main() {
    var score = 85
    var res = if (score > 60) {
        println("恭喜您通过考试")
        "及格"
    } else {
        println("欢迎下次光临")
        "不及格"
    }
    println(res) // 及格
}

        打印结果如下。

        说明:返回结果需要放在 {} 中的最后一行,否则返回的是 Unit。

1.2 when

1.2.1 条件选择

        when 语句与 Java 中 switch 语句类似。

        1)简单案例

fun main() {
    var grade = 'B'
    when(grade) {
        'A' -> {
            println("优秀")
        }
        'B' -> {
            println("良好")
        }
        'C' -> {
            println("及格")
        }
        else -> {
            println("不及格")
        }
    }
}

        说明:如果 {} 里只有一条语句,可以省略 {}。

        2)多分支合并

fun main() {
    var grade = 'B'
    when(grade) {
        'A','B','C' -> println("及格")
        else -> println("不及格")
    }
}

1.2.2 条件返回

        when 语句也可以作为结果判断。

        1)简单案例

fun main() {
    var grade = 'B'
    var res = when(grade) {
        'A' -> {
            println("你真棒")
            "优秀"
        }
        else -> {
            println("加油")
            "及格"
        }
    }
    println(res)
}

        打印结果如下。

        说明:返回结果需要放在 {} 中的最后一行,否则返回的是 Unit。

        2)范围分支

fun main() {
    var score = 85
    var res = when(score) {
        in 90..100 -> "优秀"
        in 80..<90 -> "良好"
        in 60..<80 -> "良好"
        else -> "不及格"
    }
    println(res) // "良好"
}

2 循环结构

        Kotlin 中循环结构主要包含 for、while、do-while 循环结构。另外,continue 语句可以控制跳过某次循环,break 语句可以控制跳出循环体。

2.1 for

        for 循环可以对任何提供迭代器(iterator)的对象进行遍历。

        1)遍历整数范围(IntRange、IntProgression)

fun main() {
    for (i in 1..5) {
        println(i) // 打印: 1、2、3、4、5
    }
    for (i in 5 downTo 1) {
        println(i) // 打印: 5、4、3、2、1
    }
    for (i in 1..<5 step 2) {
        println(i) // 打印: 1、3
    }
}

        2)遍历数组 / 列表

fun main() {
    var items = arrayOf("aa", "bb", "cc")
    // var items = listOf("aa", "bb", "cc")
    for (item in items) {
        println(item) // 打印: aa、bb、cc
    }
    for (index in items.indices) {
        println("items[${index}]=${items[index]}") // 打印: items[0]=aa、items[1]=bb、items[2]=cc
    }
}

2.2 while

fun main() {
    var i = 0
    while(i < 5) {
        println(i)
        i++
    }
}

2.3 do-while

fun main() {
    var i = 0
    do {
        println(i)
        i++
    } while (i < 5)
}

2.4 continue

        使用 continue 语句,可以跳过循环体中 continue 后面的语句,继续执行下一轮循环。

        1)单层循环

fun main() {
    for (i in 1..5) {
        if (i == 3) continue
        println(i) // 打印: 1、2、4、5
    }
}

        2)多层循环

fun main() {
    label@ for (i in 1..3) {
        for (j in 4..6) {
            if (j == 5) continue@label
            println("($i,$j)") // 打印: (1,4)、(2,4)、(3,4)
        }
    }
}

        说明:label 可以修改为任何符合变量命名规范的名字。

2.5 break

        使用 break 语句,可以跳出循环体,继续执行循环体后面的语句。

        1)单层循环

fun main() {
    for (i in 1..5) {
        if (i == 3) break
        println(i) // 打印: 1、2
    }
}

        2)多层循环

fun main() {
    label@ for (i in 1..3) {
        for (j in 4..6) {
            if (j == 5) break@label
            println("($i,$j)") // 打印: (1,4)
        }
    }
}

        说明:label 可以修改为任何符合变量命名规范的名字。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十九、图像的放缩和插值

项目功能实现&#xff1a;对一张图像进行放大和缩小操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 resizing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class RESIZING { public:void resizing(Mat& image); };#pragma…

【EndNote20】Endnote20和word的一些操作

文章目录 前言一、如何导入参考文献到EndNote201.1.在谷歌学术或知网上下载文献1.2.将下载好的文件导入EndNote20(可批量导入)1.3.书籍如何导入 二、Word中加入参考文献 前言 做毕设时学习了EndNote20的一些使用方法&#xff0c;并在此慢慢做汇总。 一、如何导入参考文献到End…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测分类效果基本描述程序设计参考资…

手拉手Vite+Vue3+TinyVue+Echarts+TailwindCSS

技术栈springboot3hutool-alloshi-coreVue3viteTinyVueEchartsTailwindCSS软件版本IDEAIntelliJ IDEA 2022.2.1JDK17Spring Boot3.1hutool-all5.8.18oshi-core6.4.1Vue35.0.10vite5.0.10axios1.6.7echarts5.4.3 ECharts是一个使用 JavaScript 实现的开源可视化库&#xff0c;可…

AndroidStudio 2024-2-21 Win10/11最新安装配置(Kotlin快速构建配置,gradle镜像源)

AndroidStudio 2024 Win10/11最新安装配置 教程目的&#xff1a; (从安装到卸载) &#xff0c;针对Kotlin开发配置&#xff0c;gradle-8.2-src/bin下载慢&#xff0c;以及Kotlin构建慢的解决 好久没玩AS了,下载发现装个AS很麻烦,就觉得有必要出个教程了(就是记录一下:嘻嘻) 因…

python + selenium/appnium

Selenium 的自动化原理: selenium 自动化流程: 自动化程序调用Selenium 客户端库函数&#xff08;比如点击按钮元素&#xff09;客户端库会发送Selenium 命令 给浏览器的驱动程序浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令浏览器执行命令浏览器驱动程序获取命令执行的…

封装(encapsulation)

封装[encapsulation] 封装介绍封装好处封装的实现步骤&#xff08;三步&#xff09;入门案例封装与构造器 封装介绍 封装就是把抽象的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&#xff0c;…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

智慧应急:提升灾害防范与应对能力的关键之举

目录 一、引言 二、智慧应急的内涵与特点 三、智慧应急在灾害防范中的应用 1、风险评估与监测预警 2、应急预案制定与演练 3、灾害风险宣传与教育 四、智慧应急在灾害应对中的应用 1、快速响应与决策支持 2、资源优化与调配 3、灾后恢复与重建 五、智慧应急面临的挑…

运维SRE-19 网站Web中间件服务-http-nginx

Ans自动化流程 1.网站集群核心协议&#xff1a;HTTP 1.1概述 web服务&#xff1a;网站服务&#xff0c;网站协议即可. 协议&#xff1a;http协议,https协议 服务&#xff1a;Nginx服务&#xff0c;Tengine服务....1.2 HTTP协议 http超文本传输协议&#xff0c;负责数据在网站…

NXP实战笔记(七):S32K3xx基于RTD-SDK在S32DS上配置ICU输入捕获

目录 1、概述 2、输入捕获SDK配置 2.1、SAIC中断方式 2.2、IPWM或者IPM 1、概述 输入捕获&#xff0c;可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数&#xff08;ABZ解码&#xff09;、时间戳、唤醒中断。 记录一下根据Emios模块实现上述部分…

应对电脑重新分区文件消失:预防措施、常见成因与恢复关键要点

电脑重新分区文件不见了是一个常见的问题&#xff0c;通常发生在用户对硬盘进行重新分区、格式化或操作系统重装过程中&#xff0c;可能导致已存在的文件和数据暂时不可见或永久丢失。 **预防文件丢失的方法&#xff1a;** 1. **提前备份**: 在进行任何重大磁盘操作前&#xff…

3分钟看懂设计模式01:策略模式

一、什么是策略模式 定义一些列算法类&#xff0c;将每一个算法封装起来&#xff0c;并让它们可以互相替换。 策略模式让算法独立于使用它的客户而变化&#xff0c;是一种对象行为型模式。 以上是策略模式的一般定义&#xff0c;属于是课本内容。 在没有真正理解策略模式之…

数据结构与算法——排序算法

目录 文章目录 前言 一.排序的基本概念 1.什么是就地排序 2.什么是内部排序和外部排序 3.什么是稳定排序 4.判定一个排序算法的是稳定的 二.插入排序算法 1.直接插入排序 1.1基本思想 1.2复杂度 1.3稳定性 1.4代码演示 2.折半插入排序 2.1基本思想 2.2性能 3.…

AIGC 实战:如何使用 Docker 在 Ollama 上离线运行大模型(LLM)

Ollama简介 Ollama 是一个开源平台&#xff0c;用于管理和运行各种大型语言模型 (LLM)&#xff0c;例如 Llama 2、Mistral 和 Tinyllama。它提供命令行界面 (CLI) 用于安装、模型管理和交互。您可以使用 Ollama 根据您的需求下载、加载和运行不同的 LLM 模型。 Docker简介 D…

【Unity】Unity与安卓交互

问题描述 Unity和安卓手机进行交互&#xff0c;是我们开发游戏中最常见的场景。本教程将从一个简单的例子来演示一下。 本教程需要用到Android Studio2021.1.1 1.Android Studio新建一个工程 2.选择Empty Activity 然后点击Next 3.点击Finish完成创建 4.选择File-New-New Mo…

#LLM入门|Prompt#1.3_迭代优化_Iterative

有了任务想法后&#xff0c;可以先编写初版 Prompt&#xff0c;注意清晰明确并给模型充足思考时间。运行后检查结果&#xff0c;如果不理想&#xff0c;则分析 Prompt 不够清楚或思考时间不够等原因&#xff0c;做出改进&#xff0c;再次运行。如此循环多次&#xff0c;终将找到…

国际联合行动“克罗诺斯”成功打击LockBit勒索软件组织,基础设施遭查封

在一场旷日持久的执法行动中&#xff0c;美国联邦调查局(FBI)和其国际盟友终于成功打击了臭名昭著的网络犯罪团伙LockBit。通过名为“克罗诺斯”的联合执法行动&#xff0c;执法部门取得了阶段性的胜利&#xff0c;但与网络犯罪的斗争依然任重道远。 第一章 克罗诺斯行动的进展…

关于el-select值的回显问题 : 框内显示label值还是value值

<el-form-item label"状态" prop""><el-selectv-model"roleForm.state"class"m-2"size"large"style"width: 240px"placeholder"请选择状态"value-key"value"//value-key 与下面的ke…

【Python笔记-设计模式】适配器模式

一、说明 适配器模式是一种结构型模式&#xff0c;它使接口不兼容的对象能够相互合作 (一) 解决问题 主要解决接口不兼容问题 (二) 使用场景 当系统需要使用现有的类&#xff0c;但类的接口不符合需求时当需要一个统一的输出接口&#xff0c;但输入类型不可预知时当需要创…