Kotlin语言(三):逻辑控制语句

2022-01-13  本文已影响0人  SupKing_a520

1、if语句

/**
 * 1、普通使用
 */
fun max(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

/**
 * 2、简化版
 * (1)如果if里面只有一条语句则可以省略{}和return
 * (2)kotlin是表达式语法,所以if语句带返回值
 */
fun max2(a: Int, b: Int): Int {
    return if (a > b) a else b
}

fun main() {
    println(max(10, 20))
    println(max2(6, 2))
}

2、for循环

fun main() {
    /**-------------------- for循环 --------------------*/
    val str = "abcdef"
    for (c: Char in str) {
        print("$c  ")
    }
    println()
    //a  b  c  d  e  f

    for ((index, c) in str.withIndex()) {
        print("($index, $c)  ")
    }
    println()
    //(0, a)  (1, b)  (2, c)  (3, d)  (4, e)  (5, f)


    /**-------------------- forEach循环 --------------------*/
    str.forEach {
        print("$it  ")
    }
    println()
    //a  b  c  d  e  f

    str.forEachIndexed { index, c ->
        print("($index, $c)  ")
    }
    println()
    //(0, a)  (1, b)  (2, c)  (3, d)  (4, e)  (5, f)

    //此处为函数参数,类似于c语言里的函数指针,后面会讲到,这里知道就行了
    str.forEachIndexed(::action)
}

fun action(index: Int, c: Char) {
    print("($index, $c)  ")
}

3、continue和break

fun main() {
    val str = "abcde"
    /**-------------------- continue --------------------*/
    for (c in str) {
        if (c == 'c') {
            continue
        }
        print("$c  ")
    }
    println()
    //跳过此次循环,继续执行下次循环,输出结果:a  b  d  e

    /**-------------------- break --------------------*/
    for (c in str) {
        if (c == 'c') {
            break
        }
        print("$c  ")
    }
    println()
    //跳出本层循环,不再执行,输出结果:a  b

    /**-------------------- 高级循环 --------------------*/
    str.forEach {
        if (it == 'c') {
            //continue 不能用于高级循环
            //break 不能用于高级循环
            return //结束方法,即返回到main,结束main方法
        }
    }
}

4、标签

fun main() {
    val str1 = "abc"
    val str2 = "123"
    /**-------------------- 1、多重循环 --------------------*/
    for (c1 in str1) {
        for (c2 in str2) {
            print("($c1, $c2) ")
        }
    }
    println()
    //(a, 1) (a, 2) (a, 3) (b, 1) (b, 2) (b, 3) (c, 1) (c, 2) (c, 3)

    /**-------------------- 2、标签处返回 --------------------*/
    tag@ for (c1 in str1) {
        for (c2 in str2) {
            print("($c1, $c2) ")
            if (c1 == 'b' && c2 == '2') {
                break@tag
                //return 结束方法,如果后面还有逻辑就执行不到了
            }
        }
    }
    println("main结束")
    //(a, 1) (a, 2) (a, 3) (b, 1) (b, 2) main结束
}

5、while和do while

fun main() {
    /**-------------------- while循环 --------------------*/
    //输出0到10
    var index = 0
    while (index <= 10) {
        print("$index ")
        index++
    }
    println()
    //0 1 2 3 4 5 6 7 8 9 10

    /**-------------------- do while循环 --------------------*/
    var a = 11
    do {
        print("$a ")
        a--
    } while (a <= 10 && a >= 0)
    println()
    //11 10 9 8 7 6 5 4 3 2 1 0
    //可以发现11没有在0-10的范围内还是输出了,这是因为do-while循环会先执行一次然后才执行判断

    var b = 11
    do {
        print("$b ")
        b--
    } while (b in 0..10)
    println()
    //区间的运用
    //11 10 9 8 7 6 5 4 3 2 1 0
}

6、when表达式

fun main() {
    /**-------------------- 1.基本用法 --------------------*/
    var age = 6
    when (age) {
        1 -> {
            println("没上学")
        }
        2 -> {
            println("没上学")
        }
        6 -> {
            println("上小学")
        }
        12 -> {
            println("上中学")
        }
        15 -> {
            println("上高中")
        }
        //如果只有一条语句可以省略{}
        else -> println("成年了")
    }
    //结果:上小学


    /**-------------------- 2.条件合并 --------------------*/
    age = 4
    when (age) {
        //相同的处理可以合并
        1, 2, 3, 4, 5 -> println("没上学")
        6 -> println("上小学")
        12 -> println("上中学")
        15 -> println("上高中")
        else -> println("成年了")
    }
    //结果:没上学


    /**-------------------- 3.结合区间使用 --------------------*/
    age = 16
    when (age) {
        //in+区间:表示在某个区间内
        in 1..5 -> println("没上学")
        in 6..11 -> println("上小学")
        in 12..14 -> println("上中学")
        in 15..17 -> println("上高中")
        else -> println("成年了")
    }
    //结果:上高中


    /**-------------------- 4.用来判断类型 --------------------*/
    val str: Any = "kotlin"
    //val b = str is String
    when (str) {
        //is:类型判断关键字
        is Int -> println("Int类型")
        is String -> println("String类型")
        else -> println("I未知类型")
    }
    //结果:String类型


    /**-------------------- 5.不带参数 --------------------*/
    age = 22
    when {
        age < 6 -> println("没有上学")
        age in 6..17 -> println("正在上学")
        else -> println("一看就是社会人儿")
    }
    //结果:一看就是社会人儿


    /**-------------------- 6.when表达式返回值 --------------------*/
    val kot: Any = "kotlin"
    val result = when (kot) {
        is Int -> "Int类型"
        is String -> {
            var add = 1 + 2
            add++
            "String类型"
        }
        else -> "未知类型"
    }
    println(result)
    //结果:String类型
    //说明:when表达式的返回值为满足条件的分支的最后一行结果
}
上一篇 下一篇

猜你喜欢

热点阅读