Kotlin(二)控制语句及Kotlin Koans试题

任何事情真的很怕拖着,拖着会让人越变越懒,慢慢失去动力,所以以后任何事情真的都需要坚持,以后会坚持持续更新kotlin的学习和使用,本篇文章讲述kotlin中逻辑控制运算,在以后的文章中会每篇增加一些Kotlin Koans 的题目解答,虽然网上有很多已经给出了答案,但还是想从自己的角度整理一下每个知识点,增强自己的理解吧。

一、if语句

kotlin中的if语句与java中最大的区别就是有返回值,可以使用如下:
 private fun max(a: Int, b: Int): Int = if (a > b) a else b
上述代码很简单是一个比较大小的方法,在kotlin中比较的同时会自动返回数据,我们调用此方法
var maxNumber = max(50, 25)
println(maxNumber)
//输出结果为 System.out: 50
现在我们将每个条件加入其他执行语句看kotlin会如何处理
 private fun maxPrint(a: Int, b: Int) = if(a > b){
        println("message a")
        b
        a
    }else{
        println("message b")
        a
        b
    }
//01-28 13:47:49.299 5365-5365/com.example.wuliangliang.kotlintest I/System.out: message a    //01-28 13:47:49.299 5365-5365/com.example.wuliangliang.kotlintest I/System.out: 50  a
这里我们在每个条件中加入了一个输出语句,并有两个返回值,不过系统执行了输出语句,却只返回了a = 50;这就是kotlin中if语句返回的特性,会默认返回最后一个值,用户可自行将a和b的值调换,看看输出的结果。

二、when语句

when语句更像是Java中的switch语句,但更比switch灵活和简洁
private fun desc(obj: Any): String {

        when (obj) {
            1 -> return "This is 1"
            "Hello" -> return "This is hello"
            1L -> return "This is long"
            1.0f -> return "This is float"
            else -> return "This is unknowing"
        }
}
判断传入对象的类型返回不同的字符串,还可以进行区间的判断、类型、多条件判断等
 when(obj){
            is String -> println("String is $obj")
            is Int -> println("Int is $obj")
            1,2 -> println("obj == 1 || obj == 2")
            in 1..10 -> println("In 1-10 is $obj")
            !in 1..10 -> println("! 1-10 is $obj")
        }
前面刚学习过if语句,有没有想过用真个when语句去实现刚才取最大值的方法?其实很简单
var a = 50
        var b = 25
        when{
            a>b -> println("max = $a" )
            else -> println("max = $b")
            
        }
当when后面不加参数时,他就相当于if语句,每一条都相当于if里面的条件语句,由于kotlin中逻辑语句又返回数据那上述的when方法可以更进一步简写,看看是不是更简洁更清楚
private fun desc(obj: Any) = when (obj) {
            1 -> "This is 1"
            "Hello" ->  "This is hello"
            1L,2L ->  "This is long"
            1.0f ->  "This is float"
            else ->  "This is unknowing"
        }

三、for语句

for循环的单独用法:
for (x in 1..5 step 2) {
            Log.e("list", "x = $x")
        }


for成、循环用于遍历数组:

var list = listOf("A", "B", "C", "D")
        for (item in list) {
            Log.e("list", item)
        }
输出结果为:
这里是利用for循环对数组进行遍历,下面根据索引遍历:
for (index in list.indices) {
            Log.e("list", "index $index is ${list[index]}")
        }
当然还可以利用数组的withindex()遍历
var list = listOf("A", "B", "C", "D")

        for ((index,value) in list.withIndex()){
            Log.e("list","index = $index value = $value")
        }

四、while循环

while 和do-while在使用和理解上与java基本一致。

while (a>=10){
            a -= 10
            Log.e("while"," a = $a")
        }
do-while语句:

 do {
            a-= 10
            Log.e("while"," a = $a")
        }while (a>=10)
    }

五、continu 和 break

  loop@ for (i in 1..5) {
            for (j in 1..5) {
                if (i== 3 && j==3)
                    break@loop
                else
                    Log.e("break","i = $i and j = $j")
            }
        }
输出结果为:

continue 的输出结果为:


六、例题

在kotlin koans中的第二题,就是使用kotlin中的while对集合的遍历,然后拼接成一段字符串,代码如下:
fun toJSON(collection: Collection<Int>): String {
    var stringBuilder = StringBuilder()
    stringBuilder.append("[")
    var iterator = collection.iterator()
    while (iterator.hasNext()){
        var i : Int = iterator.next()
        stringBuilder.append(i)
        if (iterator.hasNext()){//判断后面是否还有数据
            stringBuilder.append(", ")
        }
    }
    stringBuilder.append("]")
    return stringBuilder.toString()

}


















猜你喜欢

转载自blog.csdn.net/alexwll/article/details/79189719