Kotlin流程控制详解(一)

    xiaoxiao2022-07-03  117

    流程控制详解(一)

    开始kotlin的学习,在这里我也是小白一个,慢慢的去学习,只是将学习到的东西和大家进行分享,如有不对的地方,烦请大家多多指教,我们会将大多数解释放在代码中,以便更方便的理解

    流程控制可以分为三种 分支语句(if、when)循环语句(for、while、do…while)跳转语句(return、continue、break、throw)

    本篇主要对上面着前3种做详解,下一篇对后6中做详解

    if表达式(if表达式为true,跳入if花括号中,反之进入else)

    控制程序流程最基本的形式,else是可选的,在kotlin中,if是一个表达式,即会返回一个值 //示例1 //在kotlin1.3之后。main函数可以不用写参数,但是在1.3之前必须写(main(args: Array<String>)) fun main() { println(min(2,3)) } fun min(a: Int, b: Int):Int{ if (a > b){ return b }else{ return a } } //result 2 //简化示例1中的min函数 fun min(a: Int, b: Int):Int{ return if (a > b) b else a } if可以当做代码块来执行,示例如下: //示例2 fun maxV(a: Int, b: Int):Int{ val maxValue = if (a > b){ println("Max value is :$a") //$a字符串格式化,就是将a的内容添加到字符串中 a //返回一个值给maxValue }else{ println("Max value is:$b") b } return maxValue } //简化示例2中的代码 fun maxV(a: Int, b: Int):Int{ return if (a > b){ println("Max value is :$a") a }else{ println("Max value is:$b") b } } //示例3 练习if else-if else 判断学生的成绩 //多条控制,表达式的值那个返回true,就进入那个代码块。反之进入else fun gradeJudge(a: Int){ if (a >= 80){ //成绩不低于80进入该代码块 println("The student has excellent grades") }else if (a >= 60){ //成绩不低于60但不高于80进入该代码块 println("The student passed the examination") }else{ //以上均不满足进入该代码块 println("The student failed in the examination") } } fun main() { gradeJudge(75) } //The student passed the examination

    注: if条件语句中,括号中的表达式返回一定是布尔值,负责报错,与python之间有很大区别;if或else后面只有一条语句,花括号可进行省略,但是出于代码规范,最好添加,也便于阅读

    when表达式

    kotlin中的when表达式和java中的switch-case是一样的,但是kotlin中的when更加的灵活多变when会对所有的分支进行检查,直到有一个满足的分支

    is操作符,表示是的含义。in和!in操作符,表示包含和不包含

    //示例4 fun whenBasis(obj: Any?){ //Any类型,是kotlin中每一个类的基类,相当于java中的Object类。“?”的含义为此参数允许为空 when(obj){ in 1 .. 9 -> println("$obj in 1 .. 9") //obj的值在1到9,即满足该分支 is String -> println("$obj is String") //obj类型是字符串,即满足该分支 is Char -> println("$obj is Char") //obj类型是字符,满足该分支 else -> println("enter else") //obj的值或类型都不满足上面的分支,进入else中。和java中的default一样 } } fun main() { whenBasis(5) whenBasis("hello") whenBasis('a') whenBasis(true) } //5 in 1 .. 9 //hello is String //a is Char //enter else when的分支表达式也可以是一个代码块 示例5 import java.lang.Integer.parseInt fun whenBasisTwo(obj: Any?){ val str = "123" when(obj){ parseInt(str) -> println("$str equle obj") //parseInt(str: String) 将字符串转换为整数 !in 10 .. 20 -> println("$obj not in 10 .. 20") //这条语句含义是obj对象不在10到20范围之内,即进入该分支 else -> println("enter else") } } //上面的两条分支都对于obj是123来说是成立的,但是只会执行第一条分支,这是因为,当when里面有多条语句是成立的时候,只会执行第一个成立分支。 //当然,在代码中,我们是不会让分支对于某一个对象有多个成立项 fun main() { whenBasisTwo(123) } //123 equle obj //示例6 判断学生的成绩,改进示例3 fun whenGradeJudge(a: Int){ when{ a >= 80 -> println("The student has excellent grades") a >= 60 -> println("The student passed the examination") else -> println("The student failed in the examination") } } fun main() { whenGradeJudge(80) //The student has excellent grades whenGradeJudge(75) //The student passed the examination whenGradeJudge(45) //The student failed in the examination }

    for表达式

    完全颠覆java中的for循环规则,反而使用for(i in collection)的方式。写法和Python有些雷同,Python使用for i in range(10):这种规则。三种基于的原理这里不做描述

    for 循环可以对任何提供法代器( iterator )的对象进行遍历for循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象 //示例7 最简单的for循环 fun forBasis(){ val array = arrayOf(1,2,3,4,5,6) //创建一个数组 for (i in array){ //简单的循环数组中的值 println(i) } } fun main() { forBasis() } //123456 使用.indices属性来获取下标 示例8 fun forArrayStr(){ val str = arrayOf("zhao","qian","sun","li") //创建一个字符串数组 for (i in str.indices){ //遍历循环str数组的下标 println(i) //0123 } } 使用.withIndex()方法来获取下标和对应的值 //示例9 fun forArrayStr(){ val str = arrayOf("zhao","qian","sun","li") //创建一个数组 for ((index, value) in str.withIndex()){ //withindex可以获取到数组的下标和对应的值 println("$index,$value") } } fun main() { forArrayStr() }

    关键字"n until m",对应数学的[n,m)

    关键字"n downTo m",对应数学中的[n,m],此关键字用来循环递减的

    符号"n … m",对应数学中的[n,m]

    以上三种都是范围表示

    //示例10 //递增 fun increasing(){ for (i in 0 .. 5){ //表示0到5.闭区间 print(i) //012345 } for (i in 0 until 5){ //表示0到5,左闭右开区间 print(i) //01234 } } //示例11 //递减 for (i in 5 downTo 0){ //表示5到0,闭区间 print(i) //543210 } 步长:关键字step。上一个数和下一个数之间的距离就是步长。步长必须是正的 for (i in 1 .. 10 step 2){ //从1开始,每次跳过两个步长显示下一个数 print(i) //13579 }
    最新回复(0)