从零学习Kotlin之流程控制

Kotlin流程控制

1. 分支结构

1.1 if

(1)if分支

​ if分支有三种结构,分别是

//第一种
if () {
}
//第二种
if () {

} else {

}
//第三种 可以跟多个else if
if () {

} else if () {

} else if () {
    
} ………

else 是对前一if条件的取反

(2) if表达式

if 作为表达式时,可以代替java中的三目运算符?。

for (i in 1..5) {
    val age= Random.nextInt(50);
    val str = if (age > 18) "成年人" else "未成年人"
    println("age=$age 是 $str")
}	

作为表达式时,必须返回值,因此有if必须有else。和if分支相同的是,可以用{}在后面跟代码块,代码块的最后一行表达式将作为代码块的值返回。

val age = Random.nextInt(50);
val str = if (age > 18) {
    print(age)
    "成年人"
} else {
    print(age)
    "未成年人"
}
1.2 when

(1)when分支

when分支代替了java中的switch分支

 		val score = "A";
    when (score) {
        "A" -> println("优秀");
        "B" -> println("良好");
        "C" -> println("价格");
        "D" -> println("不及格");
        else -> println("缺考");

    }

如果每个case包含多个语句,需要{}包裹;此外如果同时包含两个条件,可以用,分割。

val score = "A";
when (score) {
    "A","B" -> {
        println("优秀");
        println("这次考的很棒");
    }
    "C" -> println("价格");
    "D" -> println("不及格");
    else -> println("缺考");
}

when分支不一定要常量或者字面量,可以是表达式,甚至可以是对象.如下所示,当when分支是对象是,会调用equals方法进行比较,如果true就会走该分支。

class Student {
    var major: String? = null;
    override fun equals(other: Any?): Boolean {
        if (this.major==(other as Student).major) return true
        return false;
    }

    override fun hashCode(): Int {
        return major?.hashCode() ?: 0
    }
}

fun main() {
    val student = Student();
    student.major="11";
    val student2=Student();
    student2.major="1121";
    when (student) {
         student2-> {
           println("是一个人");
        }
        else -> println("不是一个人");
    }

}

(2) when表达式

和if表达式相同,when也可以作为表达式,返回的值为符合when条件分支代码块的最后一个表达式的值。

val string = when (student) {
    student2 -> {
        println("是一个人");
        "1";
    }
    else ->{
        println("不是一个人");
        "2"
    }
}

(3)when分支处理范围

可以通过in !in判断when条件是否满足分支的区间,例如

val age = 33;
val str = when (age) {
    in 0..18 -> "未成年人"
    in 19..30 -> "青年"
    in 31..60 -> "中年人"
    else -> "老年人"
}
//输出中年人
println(str)

(4)when分支处理类型

val age:Any= 33;
val str = when (age) {
    is String -> "String类型"
    is Int -> "Int类型"
    is Float -> "Float类型"
    else -> "其他类型"
}
println(str)

(5)when条件分支

可以用来代替if else if分支,此时when分支不需要提供表达式,每个分支都是一个表达式,当为true时,走该分支。

2. 循环结构

2.1 while循环
var age:Int= 0;
while(age<10){
    age++;
}
2.2 do while

和while的区别在于会先执行一次,然后在进行while判断

2.3for in循环
for(num in 1..10){
    //循环内容
}

in前面的常量无需定义,in后面可以跟集合list 字符串 string 区间等

2.4嵌套循环

这个很常见,就是for循环包着另一个for循环。

for (num in 1..10) {
   for(num2 in 2..num){
      //循环内容
   }
}

3.控制循环结构

3.1 break结束循环

break用于跳出循环

for (num in 1..10) {
    if (num == 2) {
        break;
    }
}

当break在嵌套循环中时,break只跳出本层的循环。如下例所示,break只会跳出num2的循环。

for (num in 1..10) {
   for(num2 in 2..num){
       if (num2 == 2) {
           break;
       }
   }
}

除了可以跳出本层循以外,还可以通过@跳出外层的循环

outer@ for (num in 1..10) {
    for (num2 in 2..num) {
        if (num2 == 2) {
            break@outer;
        }
    }
}
3.2 continue

continue可以跳过本次循环的剩余内容,注意和break的区别

3.3用return结束方法

使用return可以直接从本方法跳出,返回之前调用本方法的地方继续执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值