栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin循环控制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin循环控制

1.For循环

<1>for循环可以对任何提供迭代器的对象进行遍历,如下:

 for (item in collection) print(item)

<2>循环体也可以是一个代码块

val ints = arrayOf(1,2,3)
for (item:Int in ints){
    Log.i("aaaaaa",item.toString())
}

输出:I/aaaaaa: 1

I/aaaaaa: 2

I/aaaaaa: 3

<3>如果你想通过索引遍历一个数组或者一个List,可以如下

val list2 = mutableListOf("a")
list2.add("b")
list2.add("c")
for (i in list2.indices){
    Log.i("aaaaaa",list2.get(i))
}

输出:aaaaaa: a

aaaaaa: b

aaaaaa: c

注意,这种在区间上遍历会编译成优化的实现而不会创建额外的对象。

<4>两个实例

//实例1
val items = listOf("apple","banana","kiwi")
for (item in items){
    Log.i("aaaaaa",item)
}

输出:aaaaaa: apple

          aaaaaa: banana

          aaaaaa: kiwi

//实例2
val items = listOf("apple","banana","kiwi")
for (index in items.indices){
    Log.i("aaaaaa","item at $index is ${items[index]}")
}

输出:item at 0 is apple

           item at 1 is banana

           item at 2 is kiwi

2.while与do...while循环

<1>while基本结构

while(布尔表达式){
    //循环内容
}

<2>do...while基本结构

do{
    //循环语句
}while(布尔表达式)

它的特点是,即使不满足条件,循环语句也会执行一次。

3.返回和跳转

<1>Kotlin的三种结构化跳转表达式

return:默认从最直接包围它的函数或者匿名函数返回

break:终止最直接包围它的循环

continue:继续下一次最直接包围它的循环

<2>使用标签限制break和continue

未使用标签示例:

for (i in 1..3){
    Log.i("aaaaaa","i:"+i)
    for (j in 1..3){
        Log.i("aaaaaa","j:"+j)
        if (j == 2){
            break
        }
    }
}

输出日志如下:

I/aaaaaa: i:1
I/aaaaaa: j:1
I/aaaaaa: j:2
I/aaaaaa: i:2
I/aaaaaa: j:1
I/aaaaaa: j:2
I/aaaaaa: i:3
I/aaaaaa: j:1
I/aaaaaa: j:2

使用标签示例:

loop@for (i in 1..3){
    Log.i("aaaaaa","i:"+i)
    for (j in 1..3){
        Log.i("aaaaaa","j:"+j)
        if (j == 2){
            break@loop
        }
    }
}

输出日志如下:

I/aaaaaa: i:1
I/aaaaaa: j:1
I/aaaaaa: j:2

标签限制的break跳转到刚好位于该标签指定的循环后面的执行点。continue继续标签指定的循环的下一次迭代。

<3>不同return的用法

================================第一种================================

fun foo(){
    ints.forEach {
        if (it == 4) return
        Log.i("aaaaaa",it.toString())
    }
    Log.i("aaaaaa","finish")
}

输出如下:

I/aaaaaa: 1
I/aaaaaa: 2
I/aaaaaa: 3

这个return表达式从最直接包围它的函数即foo中返回。

==============================第二种================================

fun foo(){
    ints.forEach lit@{
        if (it == 4) return@lit
        Log.i("aaaaaa",it.toString())
    }
    Log.i("aaaaaa","finish")
}

输出如下

I/aaaaaa: 1
I/aaaaaa: 2
I/aaaaaa: 3
I/aaaaaa: 5
I/aaaaaa: finish

这个只会从lambda表达式中返回,并执行之后的循环

===========================第三种============================

fun foo(){
    ints.forEach{
        if (it == 4) return@forEach
        Log.i("aaaaaa",it.toString())
    }
    Log.i("aaaaaa","finish")
}

输出与第二种相同

I/aaaaaa: 1
I/aaaaaa: 2
I/aaaaaa: 3
I/aaaaaa: 5
I/aaaaaa: finish

这是简单写法,但要求标签与该lambda函数同名,或使用匿名函数,return语句将会从函数内部的匿名函数自身返回。示例如下

fun foo(){
    ints.forEach(fun(value:Int){
        if (value == 4) return@forEach
        Log.i("aaaaaa",value.toString())
    })
    Log.i("aaaaaa","finish")
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号