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是表達(dá)式語法,所以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循環(huán)

fun main() {
    /**-------------------- for循環(huán) --------------------*/
    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循環(huán) --------------------*/
    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)

    //此處為函數(shù)參數(shù)艾疟,類似于c語言里的函數(shù)指針,后面會(huì)講到敢辩,這里知道就行了
    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()
    //跳過此次循環(huán),繼續(xù)執(zhí)行下次循環(huán)戚长,輸出結(jié)果:a  b  d  e

    /**-------------------- break --------------------*/
    for (c in str) {
        if (c == 'c') {
            break
        }
        print("$c  ")
    }
    println()
    //跳出本層循環(huán)盗冷,不再執(zhí)行,輸出結(jié)果:a  b

    /**-------------------- 高級(jí)循環(huán) --------------------*/
    str.forEach {
        if (it == 'c') {
            //continue 不能用于高級(jí)循環(huán)
            //break 不能用于高級(jí)循環(huán)
            return //結(jié)束方法同廉,即返回到main仪糖,結(jié)束main方法
        }
    }
}

4柑司、標(biāo)簽

fun main() {
    val str1 = "abc"
    val str2 = "123"
    /**-------------------- 1、多重循環(huán) --------------------*/
    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锅劝、標(biāo)簽處返回 --------------------*/
    tag@ for (c1 in str1) {
        for (c2 in str2) {
            print("($c1, $c2) ")
            if (c1 == 'b' && c2 == '2') {
                break@tag
                //return 結(jié)束方法攒驰,如果后面還有邏輯就執(zhí)行不到了
            }
        }
    }
    println("main結(jié)束")
    //(a, 1) (a, 2) (a, 3) (b, 1) (b, 2) main結(jié)束
}

5、while和do while

fun main() {
    /**-------------------- while循環(huán) --------------------*/
    //輸出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循環(huán) --------------------*/
    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
    //可以發(fā)現(xiàn)11沒有在0-10的范圍內(nèi)還是輸出了故爵,這是因?yàn)閐o-while循環(huán)會(huì)先執(zhí)行一次然后才執(zhí)行判斷

    var b = 11
    do {
        print("$b ")
        b--
    } while (b in 0..10)
    println()
    //區(qū)間的運(yùn)用
    //11 10 9 8 7 6 5 4 3 2 1 0
}

6玻粪、when表達(dá)式

fun main() {
    /**-------------------- 1.基本用法 --------------------*/
    var age = 6
    when (age) {
        1 -> {
            println("沒上學(xué)")
        }
        2 -> {
            println("沒上學(xué)")
        }
        6 -> {
            println("上小學(xué)")
        }
        12 -> {
            println("上中學(xué)")
        }
        15 -> {
            println("上高中")
        }
        //如果只有一條語句可以省略{}
        else -> println("成年了")
    }
    //結(jié)果:上小學(xué)


    /**-------------------- 2.條件合并 --------------------*/
    age = 4
    when (age) {
        //相同的處理可以合并
        1, 2, 3, 4, 5 -> println("沒上學(xué)")
        6 -> println("上小學(xué)")
        12 -> println("上中學(xué)")
        15 -> println("上高中")
        else -> println("成年了")
    }
    //結(jié)果:沒上學(xué)


    /**-------------------- 3.結(jié)合區(qū)間使用 --------------------*/
    age = 16
    when (age) {
        //in+區(qū)間:表示在某個(gè)區(qū)間內(nèi)
        in 1..5 -> println("沒上學(xué)")
        in 6..11 -> println("上小學(xué)")
        in 12..14 -> println("上中學(xué)")
        in 15..17 -> println("上高中")
        else -> println("成年了")
    }
    //結(jié)果:上高中


    /**-------------------- 4.用來判斷類型 --------------------*/
    val str: Any = "kotlin"
    //val b = str is String
    when (str) {
        //is:類型判斷關(guān)鍵字
        is Int -> println("Int類型")
        is String -> println("String類型")
        else -> println("I未知類型")
    }
    //結(jié)果:String類型


    /**-------------------- 5.不帶參數(shù) --------------------*/
    age = 22
    when {
        age < 6 -> println("沒有上學(xué)")
        age in 6..17 -> println("正在上學(xué)")
        else -> println("一看就是社會(huì)人兒")
    }
    //結(jié)果:一看就是社會(huì)人兒


    /**-------------------- 6.when表達(dá)式返回值 --------------------*/
    val kot: Any = "kotlin"
    val result = when (kot) {
        is Int -> "Int類型"
        is String -> {
            var add = 1 + 2
            add++
            "String類型"
        }
        else -> "未知類型"
    }
    println(result)
    //結(jié)果:String類型
    //說明:when表達(dá)式的返回值為滿足條件的分支的最后一行結(jié)果
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評(píng)論聯(lián)系作者诬垂。
  • 序言:七十年代末劲室,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子结窘,更是在濱河造成了極大的恐慌很洋,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晦鞋,死亡現(xiàn)場離奇詭異蹲缠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)悠垛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門线定,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人确买,你說我怎么就攤上這事斤讥。” “怎么了湾趾?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵芭商,是天一觀的道長。 經(jīng)常有香客問我搀缠,道長铛楣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任艺普,我火速辦了婚禮簸州,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歧譬。我一直安慰自己岸浑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布瑰步。 她就那樣靜靜地躺著矢洲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缩焦。 梳的紋絲不亂的頭發(fā)上读虏,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天责静,我揣著相機(jī)與錄音,去河邊找鬼掘譬。 笑死泰演,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的葱轩。 我是一名探鬼主播睦焕,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼靴拱!你這毒婦竟也來了垃喊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤袜炕,失蹤者是張志新(化名)和其女友劉穎本谜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偎窘,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乌助,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陌知。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片他托。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仆葡,靈堂內(nèi)的尸體忽然破棺而出赏参,到底是詐尸還是另有隱情,我是刑警寧澤沿盅,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布把篓,位于F島的核電站,受9級(jí)特大地震影響腰涧,放射性物質(zhì)發(fā)生泄漏韧掩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一窖铡、第九天 我趴在偏房一處隱蔽的房頂上張望揍很。 院中可真熱鬧,春花似錦万伤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阶界,卻和暖如春虹钮,著一層夾襖步出監(jiān)牢的瞬間聋庵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工芙粱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祭玉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓春畔,卻偏偏與公主長得像脱货,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子律姨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容