Kotlin入門(Android開發)基礎知識彙總(二)之控制語句

1.if-else語句

基本用法和c語言一樣,但如果每個分支內部只有一個字符串返回值,此時可以去掉大括號。示例:

if (isTrue==true) "真" else "假"

2.多路分支when/else

與switch/case的區別:

<1>關鍵字switch被when取代;

<2>判斷語句“case 常量值:”被新語句“常量值 ->”取代;

<3>取消break,關鍵字default被else取代。

when (count) {
    0 -> tv_answer.text = "000000000"
    1 -> tv_answer.text = "111111111"
    else -> tv_answer.text = "-1"
}

//允許有返回值
tv_answer.text = when (count) {
    0 -> "000000000"
    1 -> "111111111"
    else -> "-1"
}

//允許接收變量
var zero:Int = 0
var one:Int = 1
tv_answer.text = when (count) {
    odd -> "000000000"
    even -> "111111111"
    else -> "-1"
}

此外,多個常量值共用一個分支時,並排在一起並用逗號隔開即可。如果幾個常量值剛好是連續數字,可以使用“in 開始值..結束值”指定區間範圍,如果不在某個區間範圍,則使用語句“!in 開始值..結束”。

tv_answer.text = when (count) {
    1,3,5,7,9 -> "涼風有信的謎底是"諷""
    in 13..19 -> "秋月無邊的謎底"二""
    !in 6..10 -> "當裏的當,少俠你來猜猜"
    else -> "這是一首好詩"
}

3.類型判斷

關鍵字instanceof被is取代,下面是類型判斷的Kotlin代碼格式:

if (str is String){...}

同時多路分支的when/else也支持類型判斷,只不過在分支判斷時採取“is 變量類型 ->”這種形式。

示例:

tv_answer.text = when (countType) {
    is Long -> "此恨綿綿無絕期"
    is Double -> "樹上的鳥兒成雙對"
    else -> "門泊東吳萬里船"
}

4.循環處理

4.1for-in循環

採用“for(item in list)”形式進行循環操作

var poem =""
for (item in poemArray) {
    poem = "$poem$item,\n"
}

數組循環採用““for (i in 數組變量.indices)”語句,其中indices表示該數組變量的下標數組,示例:

var poem:String=""
//indices表示數組變量對應的下標數組
for (i in poemArray.indices) {
    if (i%2 == 0) {
        poem = "$poem${poemArray[i]},\n"
    } else {
        poem = "$poem${poemArray[i]}。\n"
    }
}
tv_poem_content.text = poem

其他for循環形式:

// 左閉右開區間,合法值包括11,但不包括66
for (i in 11 until 66) { ... }
// 每次默認值遞增1,這裏改爲每次遞增4
for (i in 23..89 step 4) { ... }
// for循環默認遞增,這裏改爲默認遞減
for (i in 50 downTo 7) { ... }

4.2條件循環

while循環和Java一樣

//while循環
while (i < poemArray.size) {
    if (i%2 ==0) {
        poem = "$poem${poemArray[i]},\n"
    } else {
        poem = "$poem${poemArray[i]}。\n"
    }
    i++
}

//do while循環
do {
    if (i%2 ==0) {
        poem = "$poem${poemArray[i]},\n"
    } else {
        poem = "$poem${poemArray[i]}。\n"
    }
    i++
} while (i < poemArray.size)

4.3跳出多重循環

continue和break都保留Java的用法,但Kotlin還可以跳出多重循環。跳出外層循環需要加個@標誌。示例:

//給外層循環加個outside的標誌
outside@ while (i < poemArray.size) {
    var j:Int = 0
    var item = poemArray[i];
    while ( j < item.length) {
        if (item[j] == '􀓞') {
            is_found = true
            //直接跳出outside循環
            break@outside
        }
    }
    j++
}

5.空安全

Kotlin 校驗字符串空值的幾個方法

<1>isNullOrEmpty:空指針或者字符串長度爲0時返回true,非空串與可空串均可調用;

<2>isNullOrBlank:空指針或字符串長度爲0或全爲空格時返回true,非空串與可空串均可調用;

<3>isEmpty:字符長度爲0時返回true,只有非空串可調用;

<4>isBlank:字符長度爲0或者全爲空格時返回true,只有非空串可調用;

<5>isNotEmpty:字符串長度不爲0時返回true,只有非空串可調用;

<6>isNotBlank:字符串長度不爲0且不是全空格串時返回true,只有非空串可調用。

5.1聲明可空變量

聲明一個可空字符串

var strCanNull:String?//可空字符串需要進行非空判斷,否則編譯器會提示代碼錯誤

var strNotNull:String//該變量值不能爲null,否則編譯器會提示代碼錯誤

5.2檢驗空值的運算符

示例加用法說明:

var length_null:Int?
val strB:String? = null

btn_question_dot.setOnClickListener {
    //?.表示變量爲空時直接返回null,所以返回值的變量必須被聲明爲可空類型
    length_null = strB?.length
    tv_check_result.text = "使用?.得到字符串B長度爲$length_null"
}


btn_question_colon.setOnClickListener {
    //?:表示爲空時返回右邊的值,即(x!=null)?x.**:y
    length = strB?.length?: -1
    tv_check_result.text = "使用?:得到字符串B的長度爲$length"
}

btn_exclamation_two.setOnClickListener {
    strB = "排雷完畢"
    //!!.強行把strB變量從可空類型轉換爲非空類型,從而避免非空檢驗
    length = strB!!.length
    tv_check_result.text = "使用!!得到字符串B的長度爲$length"
}

btn_exclamation_two.setOnClickListener {
    //!!.表示不做非空判斷,強行執行後面的表達式,如果變量爲空,就拋出異常
    //只有確保非空時,才能使用!!,不然使用要catch異常
    try {
        length = strB!!.length
        tv_check_result.text = "使用!!得到字符串B的長度爲$length"
    }catch(e:Exception) {
        tv_check_result.text = "發現空指針"
    }
}

6.等式判斷

6.1比較兩個字符串相等用“==”,同理,兩個字符串不等用“!=”

6.2引用相等---除了值相等外,還要求引用的地址也相等

判斷引用相等用“===”表示,同理,不等用“!==”表示

6.3 s和in

運算符is和!is---是否爲某種類型

val oneLong:Long = 1L
val result = oneLong is Long//result結果是布爾值

運算符in和!in---判斷數組是否存在等值元素

val oneArray:IntArray = intArrayOf(1, 2, 3, 4, 5)
val four:Int = 4
val result = four in oneArray//result值爲布爾值

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章