Kotlin when条件语句

Kotlin when条件语句when条件语句是一种很常用的选择语句。和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期日,如果想根据某个输入的数字来输出对应的中文格式的星期值,可以通过下面一段伪代码来描述:

用于表示星期的数字 
    如果等于1,则输出星期一 
    如果等于2,则输出星期二 
    如果等于3,则输出星期三 
    如果等于4,则输出星期四 
    如果等于5,则输出星期五 
    如果等于6,则输出星期六 
    如果等于7,则输出星期日 

对于上面的伪代码的描述,大家可能会想到用刚学过的if…else if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。Kotlin中提供了一种when语句来实现这种需求,在when语句中使用when关键字来描述一个表达式,当表达式的值和某个目标值匹配时,会执行“->”后面的语句。具体实现的伪代码如下:

when(用于表示星期的数字){ 

    else -> {  
        输出输入的数字不正确 
    } 
}

上面改写后的伪代码描述了when语句的基本语法格式,具体如下:

when(表达式/语句){ 
    目标值1 -> 执行语句1 
    目标值2 -> 执行语句2 
    目标值3 -> 执行语句3 
    ... 
    目标值n -> 执行语句n 
    else -> {  
        执行语句n+1 
    } 
}

在上面的格式中,when语句将表达式的值与每个目标值进行匹配,如果找到了匹配的值,会执行对应“->”后面的语句,如果没找到任何匹配的值,就会执行else后面的语句。

在when语句中,使用when关键字描述的不仅可以是一个表达式也可以是一条语句,如果它被当作表达式,则符合条件的目标值就是整个表达式的值,如果它被当作语句时,则忽略个别目标值,每一个分支可以是一个代码块,它的值是代码块中最后的表达式的值。如果其他目标值都不满足条件,则会求else分支中的值。如果when作为一个表达式使用时,则必须有else分支,除非编译器能够检测出的所有可能情况都已经覆盖了。接下来我们通过一个案例演示根据数字输出中文格式的星期,具体代码如下所示。

package com.itheima.chapter02.choice
fun main(args: Array<String>) {
    var week: Int = 3
    when (week) {
        1 -> print(" 星期一")
        2 -> print(" 星期二")
        3 -> print(" 星期三")
        4 -> print(" 星期四")
        5 -> print(" 星期五")
       6 -> print(" 星期六")
       7 -> print(" 星期日")
       else -> {
           print(" 输入的数字不正确……")
       }
   }
}

运行结果:

星期三

上述代码中,由于变量week的值为3,整个when语句判断的结果满足第7行的条件,因此输出“星期三”,上述代码中的else语句用于处理与前面的目标值都不匹配的情况,将第3行的代码替换为“var week:Int=10”,再次运行程序,则会输出“输入的数字不正确……”

在使用when语句的过程中,如果多个目标值后面的执行语句是一样的,则可以把多个目标值放在一起,用逗号隔开。例如要判断一年中某个月份为什么季节,使用数字1~12来表示一年中的12个月份,当输入的数字为12、1、2时就视为冬季,当输入的数字为3、4、5时就视为春季,当输入的数字为6、7、8时就视为夏季,当输入的数字为9、10、11时就视为秋季,否则就提示“没有这个月份,请重新输入……”。接下来我们通过一个案例来实现上面的描述情况,具体代码如下所示。

package com.itheima.chapter02.choice
fun main(args: Array<String>) {
    var month: Int = 7
    when (month) {
        12, 1, 2 -> print(" 冬季")
        3, 4, 5 -> print("春季")
        6, 7, 8 -> print("夏季")
        9, 10, 11 -> print("秋季")
        else -> {
           print(" 没有这个月份,请重新输入……")
       }
   }
}

运行结果:

夏季

在上述代码中,定义的月份为7月,符合条件“6, 7, 8->print("夏季")”,因此输出夏季。

when语句也可以用来取代if…else if…else语句,如果when语句中不提供参数,所有的分支条件都是简单的布尔表达式,则当一个分支条件为真时可执行该分支后面的执行语句,具体代码如下所示。

package com.itheima.chapter02.choice
fun main(args: Array<String>) {
    var a: Int = 7
    var b: Int = 8
    when {
        a > b -> print("a 大于b")
        a < b -> print("a 小于b")
        else -> print("a 等于b")
    }
}

运行结果:

a小于b

在上述代码中可以看到,定义了两个整型变量分别是a、b,变量a的初始值为7,变量b的初始值为8,在when语句中,当a>b为true时,会执行“a>b”后面的语句,当a<b为true时,会执行“a<b”后面的语句,否则会执行else后面的语句。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!