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

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表达式的返回值为满足条件的分支的最后一行结果
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容