Kotlin条件语句和循环语句详解

Android修行手册之Kotlin-【Null检查】、【类型检查】、【区间】 Java中有**【instanceof】关键字可以检测是否为某个类型,Kotlin中也有,是【is】**//类型后面加?表示可以为空var myAge: String? = “666”if (myAge is String) {//判断变量myAge是否为字符串类型}Kotlin有一个**【Any】**类型,结合【is】**,可以自动转换类型,如下//类型后面加?表示可以为空var myAge: Any? = “666”if (myAge is String) {//判断变量myAge是否为字符串类型Log 阅读详情

在 Android Kotlin 开发中,条件语句和循环语句是最基础、最常用的语法之一。

条件语句用于根据不同条件执行不同代码,循环语句用于重复执行一段代码。无论是表单校验、按钮点击、页面状态处理、列表遍历,还是数据筛选,都离不开它们。

本文主要介绍 Kotlin 中常用的条件语句和循环语句,包括:

  • if
  • if else
  • if else if
  • when
  • for
  • while
  • do while
  • repeat
  • break
  • continue
  • forEach
  • forEachIndexed

一、Kotlin 条件语句

Kotlin 中常用的条件语句有:

if
if else
if else if
when

其中 if 类似 Java 中的 if,而 when 类似 Java 中的 switch,但 Kotlin 的 when 更强大、更灵活。


1. if 条件语句

if 是最基础的条件判断语句。

基本格式:

if (条件表达式) {
    条件成立时执行的代码
}

示例:

val age = 18

if (age >= 18) {
    println("已经成年")
}

输出结果:

已经成年

这里的判断逻辑是:

age >= 18

如果结果是 true,就执行 {} 中的代码。


2. if else 条件语句

如果希望条件成立执行一段代码,条件不成立执行另一段代码,可以使用 if else。

基本格式:

if (条件表达式) {
    条件成立时执行
} else {
    条件不成立时执行
}

示例:

val age = 16

if (age >= 18) {
    println("已经成年")
} else {
    println("未成年")
}

输出结果:

未成年

3. if else if 多条件判断

如果有多个条件需要判断,可以使用 if else if。

基本格式:

if (条件1) {
    条件1成立时执行
} else if (条件2) {
    条件2成立时执行
} else if (条件3) {
    条件3成立时执行
} else {
    以上条件都不成立时执行
}

示例:根据分数判断等级。

val score = 85

if (score >= 90) {
    println("优秀")
} else if (score >= 80) {
    println("良好")
} else if (score >= 60) {
    println("及格")
} else {
    println("不及格")
}

输出结果:

良好

执行过程:

score >= 90 不成立
score >= 80 成立
所以输出:良好

一旦某个条件成立,后面的判断就不会继续执行。


4. if 可以作为表达式使用

Kotlin 中的 if 不仅是语句,还可以作为表达式使用。

也就是说,if 可以直接返回一个值。

示例:

val a = 10
val b = 20

val max = if (a > b) {
    a
} else {
    b
}

println(max)

输出结果:

20

如果代码只有一行,也可以简写:

val max = if (a > b) a else b

这个写法在 Kotlin 中非常常见。


5. if 表达式通常需要 else

如果用 if 给变量赋值,一般必须写 else,否则 Kotlin 不知道条件不成立时返回什么。

错误写法:

val age = 16

val result = if (age >= 18) {
    "成年人"
}

正确写法:

val age = 16

val result = if (age >= 18) {
    "成年人"
} else {
    "未成年人"
}

也可以简写:

val result = if (age >= 18) "成年人" else "未成年人"

6. 条件判断中的比较运算符

条件语句中经常会使用比较运算符。

运算符说明示例
>大于age > 18
<小于age < 18
>=大于等于age >= 18
<=小于等于age <= 18
==等于name == "张三"
!=不等于name != "张三"

示例:

val username = "admin"

if (username == "admin") {
    println("管理员用户")
}

注意:Kotlin 中判断两个值是否相等,使用 ==。

val name = "Kotlin"

if (name == "Kotlin") {
    println("名称相同")
}

7. 逻辑运算符

多个条件组合判断时,需要使用逻辑运算符。

运算符说明示例
&&并且,多个条件都成立age >= 18 && hasCard
``
!取反!isLogin

7.1 && 并且

val age = 20
val hasTicket = true

if (age >= 18 && hasTicket) {
    println("可以入场")
}

只有两个条件都成立,才会输出:

可以入场

7.2 || 或者

val isVip = false
val isAdmin = true

if (isVip || isAdmin) {
    println("允许访问")
}

只要有一个条件成立,就会输出:

允许访问

7.3 ! 取反

val isLogin = false

if (!isLogin) {
    println("请先登录")
}

!isLogin 表示不是已登录状态,所以会输出:

请先登录

8. Android 中常见 if 使用场景

8.1 判断输入是否为空

val username = usernameEditText.text.toString()

if (username.isBlank()) {
    Toast.makeText(this, "用户名不能为空", Toast.LENGTH_SHORT).show()
}

isBlank() 表示判断字符串是否为空,或者只包含空格。


8.2 判断密码长度

val password = passwordEditText.text.toString()

if (password.length < 6) {
    Toast.makeText(this, "密码不能少于 6 位", Toast.LENGTH_SHORT).show()
}

8.3 登录表单校验

val username = usernameEditText.text.toString()
val password = passwordEditText.text.toString()

if (username.isBlank()) {
    Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show()
} else if (password.isBlank()) {
    Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show()
} else if (password.length < 6) {
    Toast.makeText(this, "密码不能少于 6 位", Toast.LENGTH_SHORT).show()
} else {
    Toast.makeText(this, "开始登录", Toast.LENGTH_SHORT).show()
}

8.4 判断 View 是否显示

if (progressBar.visibility == View.VISIBLE) {
    progressBar.visibility = View.GONE
} else {
    progressBar.visibility = View.VISIBLE
}

8.5 判断网络状态

if (isNetworkAvailable()) {
    println("网络可用,开始请求数据")
} else {
    println("网络不可用,请检查网络")
}

9. when 条件语句

when 是 Kotlin 中非常重要的条件语句。

它类似 Java 中的 switch,但是更强大。

基本格式:

when (变量) {
    值1 -> 执行代码1
    值2 -> 执行代码2
    值3 -> 执行代码3
    else -> 默认执行代码
}

示例:

val day = 1

when (day) {
    1 -> println("星期一")
    2 -> println("星期二")
    3 -> println("星期三")
    4 -> println("星期四")
    5 -> println("星期五")
    6 -> println("星期六")
    7 -> println("星期日")
    else -> println("日期错误")
}

输出结果:

星期一

10. when 可以匹配多个值

如果多个值执行相同逻辑,可以用逗号隔开。

val day = 6

when (day) {
    1, 2, 3, 4, 5 -> println("工作日")
    6, 7 -> println("周末")
    else -> println("日期错误")
}

输出结果:

周末

11. when 可以判断范围

when 可以结合 in 判断范围。

val score = 85

when (score) {
    in 90..100 -> println("优秀")
    in 80..89 -> println("良好")
    in 60..79 -> println("及格")
    in 0..59 -> println("不及格")
    else -> println("分数不合法")
}

输出结果:

良好

这里:

in 80..89

表示 score 在 80 到 89 之间。


12. when 可以作为表达式使用

和 if 一样,when 也可以返回值。

val score = 85

val level = when (score) {
    in 90..100 -> "优秀"
    in 80..89 -> "良好"
    in 60..79 -> "及格"
    in 0..59 -> "不及格"
    else -> "分数不合法"
}

println(level)

输出结果:

良好

这种写法比 if else if 更清晰。


13. when 不带参数

when 也可以不带参数,用来替代复杂的 if else if。

val score = 85

when {
    score >= 90 -> println("优秀")
    score >= 80 -> println("良好")
    score >= 60 -> println("及格")
    else -> println("不及格")
}

这种写法等价于:

if (score >= 90) {
    println("优秀")
} else if (score >= 80) {
    println("良好")
} else if (score >= 60) {
    println("及格")
} else {
    println("不及格")
}

14. when 判断类型

Kotlin 中可以使用 is 判断类型。

fun checkType(value: Any) {
    when (value) {
        is String -> println("这是字符串,长度是:${value.length}")
        is Int -> println("这是整数,值是:$value")
        is Boolean -> println("这是布尔值:$value")
        else -> println("未知类型")
    }
}

调用:

checkType("Hello")
checkType(100)
checkType(true)

输出结果:

这是字符串,长度是:5
这是整数,值是:100
这是布尔值:true

注意:

is String

表示判断 value 是否是 String 类型。

在 is String 分支中,Kotlin 会自动把 value 当成 String 使用,所以可以直接访问:

value.length

15. when 判断枚举类型

在 Android 开发中,有时会使用枚举表示状态。

enum class LoginState {
    SUCCESS,
    FAILED,
    LOADING
}

使用 when 判断:

val state = LoginState.SUCCESS

when (state) {
    LoginState.SUCCESS -> println("登录成功")
    LoginState.FAILED -> println("登录失败")
    LoginState.LOADING -> println("登录中")
}

如果 when 已经覆盖了所有枚举值,可以不写 else。


16. Android 中常见 when 使用场景

16.1 根据按钮 ID 判断点击事件

fun onButtonClick(view: View) {
    when (view.id) {
        R.id.loginButton -> {
            println("点击了登录按钮")
        }

        R.id.registerButton -> {
            println("点击了注册按钮")
        }

        R.id.cancelButton -> {
            println("点击了取消按钮")
        }

        else -> {
            println("未知按钮")
        }
    }
}

16.2 根据页面状态更新 UI

enum class PageState {
    LOADING,
    SUCCESS,
    ERROR,
    EMPTY
}
fun updatePageState(state: PageState) {
    when (state) {
        PageState.LOADING -> {
            progressBar.visibility = View.VISIBLE
            contentView.visibility = View.GONE
            errorView.visibility = View.GONE
        }

        PageState.SUCCESS -> {
            progressBar.visibility = View.GONE
            contentView.visibility = View.VISIBLE
            errorView.visibility = View.GONE
        }

        PageState.ERROR -> {
            progressBar.visibility = View.GONE
            contentView.visibility = View.GONE
            errorView.visibility = View.VISIBLE
        }

        PageState.EMPTY -> {
            progressBar.visibility = View.GONE
            contentView.visibility = View.GONE
            errorView.visibility = View.GONE
        }
    }
}

16.3 根据接口返回码处理结果

val code = 200

when (code) {
    200 -> println("请求成功")
    400 -> println("参数错误")
    401 -> println("未登录或登录过期")
    403 -> println("没有权限")
    404 -> println("资源不存在")
    500 -> println("服务器错误")
    else -> println("未知错误")
}

17. if 和 when 怎么选择?

场景推荐使用
简单的真假判断if
两个分支判断if else
多个范围判断when
多个固定值匹配when
判断枚举状态when
判断类型when
复杂条件组合if 或不带参数的 when

简单判断:

if (isLogin) {
    println("已登录")
} else {
    println("未登录")
}

多个固定值匹配:

when (status) {
    0 -> println("未开始")
    1 -> println("进行中")
    2 -> println("已完成")
    else -> println("未知状态")
}

范围判断:

when (score) {
    in 90..100 -> println("优秀")
    in 80..89 -> println("良好")
    in 60..79 -> println("及格")
    else -> println("不及格")
}

18. 完整示例:登录判断

fun login(username: String, password: String) {
    if (username.isBlank()) {
        println("用户名不能为空")
        return
    }

    if (password.isBlank()) {
        println("密码不能为空")
        return
    }

    if (password.length < 6) {
        println("密码不能少于 6 位")
        return
    }

    println("登录成功")
}

调用:

login("", "123456")
login("admin", "123")
login("admin", "123456")

输出结果:

用户名不能为空
密码不能少于 6 位
登录成功

这里用了多个 if 加 return 的写法,这种方式在 Android 表单校验中很常见。


19. 完整示例:根据状态更新 UI

enum class UiState {
    Loading,
    Success,
    Error,
    Empty
}
fun updateUi(state: UiState) {
    when (state) {
        UiState.Loading -> {
            println("显示加载中")
        }

        UiState.Success -> {
            println("显示内容")
        }

        UiState.Error -> {
            println("显示错误页面")
        }

        UiState.Empty -> {
            println("显示空页面")
        }
    }
}

调用:

updateUi(UiState.Loading)
updateUi(UiState.Success)

输出结果:

显示加载中
显示内容

20. 条件语句总结

Kotlin 中常用的条件语句如下:

条件语句作用
if单条件判断
if else二选一判断
if else if多条件判断
when多分支判断,类似 Java 的 switch,但更强大
if 表达式根据条件返回一个值
when 表达式根据不同分支返回一个值

常用写法:

val result = if (score >= 60) "及格" else "不及格"
val level = when (score) {
    in 90..100 -> "优秀"
    in 80..89 -> "良好"
    in 60..79 -> "及格"
    else -> "不及格"
}

对于 Android Kotlin 开发来说:

简单判断用 if,多状态判断用 when。

尤其是处理页面状态、按钮点击、接口返回码、枚举状态时,when 会让代码更加清晰。


二、Kotlin 循环语句

在 Kotlin 中,循环语句主要用于重复执行一段代码。

比如:

打印 1 到 10
遍历数组
遍历集合
循环读取数据
重复执行某个任务

Kotlin 中常用的循环方式有:

for
while
do while
repeat

其中最常用的是 for 循环。


1. for 循环

for 循环通常用于遍历范围、数组、集合等。

基本格式:

for (变量 in 数据范围) {
    循环体
}

示例:

for (i in 1..5) {
    println(i)
}

输出结果:

1
2
3
4
5

这里:

1..5

表示从 1 到 5,包含 1 和 5。


2. 使用 .. 表示闭区间

Kotlin 中可以使用 .. 创建一个范围。

for (i in 1..10) {
    println(i)
}

表示从 1 循环到 10,包含 10。

示例:

for (i in 1..3) {
    println("第 $i 次循环")
}

输出结果:

第 1 次循环
第 2 次循环
第 3 次循环

3. 使用 until 表示左闭右开区间

until 表示不包含结束值。

for (i in 1 until 5) {
    println(i)
}

输出结果:

1
2
3
4

这里不包含 5。

等价理解:

1 until 5

表示从 1 到 4。

在 Android 中遍历集合下标时经常用:

val names = listOf("张三", "李四", "王五")

for (i in 0 until names.size) {
    println(names[i])
}

4. 使用 downTo 倒序循环

如果想从大到小循环,可以使用 downTo。

for (i in 5 downTo 1) {
    println(i)
}

输出结果:

5
4
3
2
1

示例:

for (count in 3 downTo 1) {
    println("倒计时:$count")
}

println("开始")

输出结果:

倒计时:3
倒计时:2
倒计时:1
开始

5. 使用 step 设置步长

默认情况下,循环每次递增或递减 1。

如果想改变步长,可以使用 step。

for (i in 1..10 step 2) {
    println(i)
}

输出结果:

1
3
5
7
9

倒序也可以使用 step:

for (i in 10 downTo 1 step 2) {
    println(i)
}

输出结果:

10
8
6
4
2

6. for 循环常见范围写法总结

写法说明示例结果
1..5从 1 到 5,包含 51 2 3 4 5
1 until 5从 1 到 5,不包含 51 2 3 4
5 downTo 1从 5 倒序到 15 4 3 2 1
1..10 step 2从 1 到 10,每次加 21 3 5 7 9
10 downTo 1 step 2从 10 到 1,每次减 210 8 6 4 2

7. 遍历数组

Kotlin 中可以使用 for 遍历数组。

val names = arrayOf("张三", "李四", "王五")

for (name in names) {
    println(name)
}

输出结果:

张三
李四
王五

这里的 name 会依次拿到数组中的每一个元素。


8. 遍历集合 List

Android 开发中,经常会使用 List 集合。

val languages = listOf("Kotlin", "Java", "C++")

for (language in languages) {
    println(language)
}

输出结果:

Kotlin
Java
C++

这种写法比传统下标循环更简洁。


9. 遍历集合下标

如果需要使用下标,可以使用 indices。

val names = listOf("张三", "李四", "王五")

for (i in names.indices) {
    println("下标:$i,姓名:${names[i]}")
}

输出结果:

下标:0,姓名:张三
下标:1,姓名:李四
下标:2,姓名:王五

这里:

names.indices

表示集合的下标范围。

如果 names 有 3 个元素,那么 names.indices 就是:

0..2

10. 同时遍历下标和元素

Kotlin 提供了 withIndex(),可以同时拿到下标和元素。

val names = listOf("张三", "李四", "王五")

for ((index, name) in names.withIndex()) {
    println("下标:$index,姓名:$name")
}

输出结果:

下标:0,姓名:张三
下标:1,姓名:李四
下标:2,姓名:王五

这种写法在 Android 列表数据处理时很常用。


11. 遍历 Map

Map 是键值对集合。

val userMap = mapOf(
    "name" to "张三",
    "age" to "18",
    "city" to "北京"
)

for ((key, value) in userMap) {
    println("key:$key,value:$value")
}

输出结果:

key:name,value:张三
key:age,value:18
key:city,value:北京

这里:

(key, value)

表示同时取出 Map 中的键和值。


12. while 循环

while 循环会在条件成立时一直执行。

基本格式:

while (条件) {
    循环体
}

示例:

var count = 1

while (count <= 5) {
    println(count)
    count++
}

输出结果:

1
2
3
4
5

执行流程:

先判断条件
条件成立,执行循环体
执行完后,再次判断条件
直到条件不成立,循环结束

13. while 循环使用场景

while 适合用于不确定循环次数,但知道结束条件的场景。

例如:

var retryCount = 0

while (retryCount < 3) {
    println("第 ${retryCount + 1} 次重试")
    retryCount++
}

输出结果:

第 1 次重试
第 2 次重试
第 3 次重试

Android 中可以用于模拟重试逻辑、轮询逻辑等。


14. do while 循环

do while 和 while 类似,但是它会先执行一次循环体,再判断条件。

基本格式:

do {
    循环体
} while (条件)

示例:

var count = 1

do {
    println(count)
    count++
} while (count <= 5)

输出结果:

1
2
3
4
5

15. do while 和 while 的区别

while 是先判断,再执行。

var count = 10

while (count <= 5) {
    println(count)
}

这段代码不会执行,因为一开始条件就不成立。

do while 是先执行一次,再判断。

var count = 10

do {
    println(count)
} while (count <= 5)

输出结果:

10

即使条件不成立,do while 也至少会执行一次。

循环类型判断条件时机是否至少执行一次
while先判断,后执行不一定
do while先执行,后判断是

16. repeat 重复执行

Kotlin 中还提供了一个非常简洁的重复执行函数:repeat。

repeat(5) {
    println("Hello Kotlin")
}

输出结果:

Hello Kotlin
Hello Kotlin
Hello Kotlin
Hello Kotlin
Hello Kotlin

repeat(5) 表示重复执行 5 次。


17. repeat 中获取下标

repeat 的代码块中可以拿到当前下标。

repeat(3) { index ->
    println("当前下标:$index")
}

输出结果:

当前下标:0
当前下标:1
当前下标:2

注意:repeat 的下标从 0 开始。

如果想从 1 开始显示,可以这样写:

repeat(3) { index ->
    println("第 ${index + 1} 次执行")
}

输出结果:

第 1 次执行
第 2 次执行
第 3 次执行

18. break 跳出循环

break 用来直接结束整个循环。

示例:

for (i in 1..10) {
    if (i == 5) {
        break
    }
    println(i)
}

输出结果:

1
2
3
4

当 i == 5 时,执行 break,整个循环结束。


19. continue 跳过本次循环

continue 用来跳过当前这一次循环,继续下一次循环。

示例:

for (i in 1..5) {
    if (i == 3) {
        continue
    }
    println(i)
}

输出结果:

1
2
4
5

当 i == 3 时,执行 continue,所以 3 没有被打印。


20. break 和 continue 的区别

关键字作用
break直接结束整个循环
continue跳过本次循环,继续下一次循环

break 示例:

for (i in 1..5) {
    if (i == 3) {
        break
    }
    println(i)
}

输出结果:

1
2

continue 示例:

for (i in 1..5) {
    if (i == 3) {
        continue
    }
    println(i)
}

输出结果:

1
2
4
5

21. 嵌套循环

循环中还可以继续写循环,这叫嵌套循环。

for (i in 1..3) {
    for (j in 1..3) {
        println("i = $i, j = $j")
    }
}

输出结果:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
i = 2, j = 3
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3

嵌套循环常用于二维数据、表格、矩阵等场景。


22. 带标签的 break

如果有嵌套循环,普通 break 只能跳出当前这一层循环。

for (i in 1..3) {
    for (j in 1..3) {
        if (j == 2) {
            break
        }
        println("i = $i, j = $j")
    }
}

如果想直接跳出外层循环,可以使用标签。

outer@ for (i in 1..3) {
    for (j in 1..3) {
        if (j == 2) {
            break@outer
        }
        println("i = $i, j = $j")
    }
}

输出结果:

i = 1, j = 1

这里:

break@outer

表示跳出名为 outer 的外层循环。


23. 带标签的 continue

标签也可以和 continue 搭配使用。

outer@ for (i in 1..3) {
    for (j in 1..3) {
        if (j == 2) {
            continue@outer
        }
        println("i = $i, j = $j")
    }
}

执行逻辑是:

当 j == 2 时,跳过当前外层循环的剩余部分,进入下一轮 i

输出结果:

i = 1, j = 1
i = 2, j = 1
i = 3, j = 1

24. Android 中循环的常见使用场景

24.1 遍历列表数据

val userList = listOf("张三", "李四", "王五")

for (user in userList) {
    println("用户名:$user")
}

24.2 遍历控件列表

val viewList = listOf(textView1, textView2, textView3)

for (view in viewList) {
    view.visibility = View.GONE
}

这个写法可以批量隐藏多个控件。


24.3 批量设置按钮点击事件

val buttons = listOf(button1, button2, button3)

for (button in buttons) {
    button.setOnClickListener {
        Toast.makeText(this, "按钮被点击", Toast.LENGTH_SHORT).show()
    }
}

24.4 遍历数据并筛选

val names = listOf("Kotlin", "Java", "Android", "Jetpack")

for (name in names) {
    if (name.length > 5) {
        println(name)
    }
}

输出结果:

Kotlin
Android
Jetpack

24.5 查找指定数据

val names = listOf("张三", "李四", "王五")

for (name in names) {
    if (name == "李四") {
        println("找到了:$name")
        break
    }
}

找到目标后使用 break 结束循环,避免继续无意义遍历。


24.6 表单批量校验

val inputList = listOf(username, password, phone)

for (input in inputList) {
    if (input.isBlank()) {
        println("存在未填写的内容")
        break
    }
}

25. forEach 遍历集合

Kotlin 集合还可以使用 forEach 遍历。

val names = listOf("张三", "李四", "王五")

names.forEach { name ->
    println(name)
}

输出结果:

张三
李四
王五

如果 Lambda 只有一个参数,可以使用默认参数名 it:

names.forEach {
    println(it)
}

26. forEachIndexed 同时获取下标和元素

如果既想拿到下标,又想拿到元素,可以使用 forEachIndexed。

val names = listOf("张三", "李四", "王五")

names.forEachIndexed { index, name ->
    println("下标:$index,姓名:$name")
}

输出结果:

下标:0,姓名:张三
下标:1,姓名:李四
下标:2,姓名:王五

27. for 和 forEach 怎么选择?

场景推荐写法
普通遍历for
需要 break 或 continuefor
简单遍历集合forEach
需要下标和元素forEachIndexed 或 withIndex()
逻辑较复杂for
只做简单处理forEach

需要注意:

forEach

里面不能像普通 for 一样直接使用 break 和 continue。

所以如果你需要中途结束循环,优先使用普通 for。


28. Kotlin 没有 Java 那种传统 for 循环

Java 中常见写法:

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

Kotlin 中不这样写。

Kotlin 推荐使用:

for (i in 0 until 10) {
    println(i)
}

或者:

repeat(10) { i ->
    println(i)
}

29. 完整示例:登录表单批量校验

fun checkInputs(inputs: List<String>): Boolean {
    for (input in inputs) {
        if (input.isBlank()) {
            return false
        }
    }
    return true
}

fun main() {
    val username = "admin"
    val password = "123456"
    val phone = "13800138000"

    val result = checkInputs(listOf(username, password, phone))

    if (result) {
        println("表单校验通过")
    } else {
        println("存在未填写内容")
    }
}

输出结果:

表单校验通过

30. 完整示例:筛选有效数据

fun main() {
    val names = listOf("Kotlin", "", "Android", " ", "Jetpack")

    val validNames = mutableListOf<String>()

    for (name in names) {
        if (name.isBlank()) {
            continue
        }

        validNames.add(name)
    }

    println(validNames)
}

输出结果:

[Kotlin, Android, Jetpack]

这里:

continue

用于跳过空字符串。


31. 循环语句总结

Kotlin 中常用循环方式如下:

循环方式作用
for遍历范围、数组、集合
while条件成立时重复执行
do while先执行一次,再判断条件
repeat重复执行指定次数
forEach集合遍历
forEachIndexed遍历集合时同时获取下标和元素

常用写法:

for (i in 1..5) {
    println(i)
}
for (i in 0 until list.size) {
    println(list[i])
}
for (item in list) {
    println(item)
}
repeat(3) {
    println("执行任务")
}

循环控制关键字:

关键字作用
break结束整个循环
continue跳过本次循环
break@标签跳出指定标签的循环
continue@标签跳过指定标签的本轮循环

对于 Android Kotlin 开发来说:

遍历集合用 for 或 forEach;
需要下标用 indices、withIndex 或 forEachIndexed;
需要中途退出循环时,优先使用普通 for;
固定次数重复执行时,可以使用 repeat。

最后记住一句话:

循环的作用,就是让一段代码按照条件重复执行。

三、条件语句和循环语句综合示例

下面通过一个简单示例,把条件语句和循环语句结合起来。

需求:遍历用户名列表,过滤空数据,并判断用户名长度是否合格。

fun main() {
    val userNames = listOf("admin", "", "Tom", "ZhangSan", " ")

    for (name in userNames) {
        if (name.isBlank()) {
            println("发现空用户名,已跳过")
            continue
        }

        if (name.length < 4) {
            println("用户名 $name 长度不足")
        } else {
            println("用户名 $name 合格")
        }
    }
}

输出结果:

用户名 admin 合格
发现空用户名,已跳过
用户名 Tom 长度不足
用户名 ZhangSan 合格
发现空用户名,已跳过

这个例子中:

语法作用
for遍历用户名列表
if判断用户名是否为空
continue跳过空用户名
if else判断用户名长度是否合格

四、最终总结

Android Kotlin 中,条件语句和循环语句是控制程序流程的基础。

条件语句主要用于判断:

满足某个条件时执行某段代码。

循环语句主要用于重复:

按照条件或次数重复执行某段代码。

开发中可以遵循以下原则:

场景推荐写法
简单条件判断if
二选一判断if else
多条件判断if else if 或 when
多状态判断when
遍历数组或集合for
固定次数重复执行repeat
不确定循环次数while
至少执行一次do while
简单集合遍历forEach
需要下标和元素forEachIndexed
需要中途结束循环for + break
需要跳过本次循环for + continue

简单判断用 if,多状态判断用 when;遍历集合用 for 或 forEach,需要中途退出时优先使用普通 for。

掌握这些语法后,就可以更清晰地编写 Android Kotlin 中的业务逻辑、页面状态处理、表单校验和列表数据处理代码。

7、Kotlin编程:导入指令、条件语句、范围与循环详解 本文详细介绍了 Kotlin 编程中的导入指令、条件语句、范围操作、循环结构等核心语法特性。内容涵盖导入声明的冲突解决、if 和 when 条件判断的使用、范围和级数的创建、循环控制语句(for、while、do-while)以及操作符优先级等知识点。通过示例代码和流程图,帮助开发者更好地理解和应用 Kotlin 的控制结构和语法特性,提升代码的可读性和开发效率。 阅读详情

相关推荐

LoFTR训练避坑指南:从零到一复现论文训练流程

本文是一份详细的LoFTR模型训练避坑指南,旨在帮助开发者从零开始复现论文训练流程。文章系统性地讲解了环境配置、数据准备、代码调试与显存优化等关键步骤,并针对常见的训练错误提供了解决方案,确保训练过程顺利进行。

weixin_29091837的博客 204

kotlin学习(1)基础

所有笔记整理自电子工业出版社的《Kotlin实战》一书 变量声明:   类型放在变量名后面:val name:String="aaaa",String可以省略,因为可以根据等号后面的内容自动判断出name的类型   如果可空:val name:String?=null var:   修饰的变量可读可写;值可以被改变,但类型不可以。 val:   修饰的变量只可...

diaojiuku2727的博客 135

GPU架构-SIMT

本文深度剖析了GPU的SIMT架构,从硬件实现层面解析其与SIMD的本质差异。SIMT通过将32个线程捆绑为warp执行,在标量编程模型下实现数据并行。文章对比了SIMD和SIMT的执行模型、分支处理机制及存储层次,指出SIMT是对SIMD的虚拟化抽象。重点分析了Volta架构引入的独立线程调度技术,以及访存合并对性能的关键影响。通过定量数据展示了各代GPU架构的寄存器文件规模和线程调度机制,为开发者优化GPU程序提供了硬件层面的理论基础。

技术引领业务创新 971

Kotlin编程基础教程:条件语句和循环结构

1.背景介绍 Kotlin是一种强类型、静态类型的编程语言,由JetBrains公司开发,用于Android应用开发和Java平台上的其他应用。Kotlin语言的设计目标是简化Java语言的一些复杂性,提高开发效率和代码质量。Kotlin语言的核心特性包括类型推断、扩展函数、数据类、委托属性、协程等。 在Kotlin中,条件语句和循环结构是编程的基本组成部分,用于实现程序的控制流。本文将详细介...

AI天才研究院 718

Unity3D 2022版如何一键安装Newtonsoft.Json?最新Package Manager教程

本文详细介绍了在Unity3D 2022及以上版本中,如何通过Package Manager一键安装和配置Newtonsoft.Json(Json.NET)。教程涵盖了从打开Package Manager、搜索并安装正确包源,到验证安装和基础使用的完整流程,旨在帮助开发者以现代化、可靠的方式集成这一强大的JSON处理框架,提升开发效率并规避手动导入的常见问题。

lg888的博客 920

Mamba与iTransformer融合:时间序列预测中的曼巴注意力机制创新实践

本文探讨了Mamba与iTransformer融合在时间序列预测中的创新实践,重点介绍了曼巴注意力机制的设计与优势。通过双路径信息流设计,该方案在保持O(n)复杂度的同时,显著提升了预测精度和训练效率。实验证明,混合架构在电力负荷、气象数据等多变量长序列场景中表现优异,预测误差降低至0.083,内存占用仅4.2GB。

weixin_29292535的博客 219

Kotlin基础语法 四、控制语句

一、If 条件语句 Kotlin 和Java 的if有一定的区别 1、)传统的If else 用法和java一样 示例: val a = 10 var b : String if (a < 0) { b = “a是小于0的一个整数” } else if (a in 0…10) { b = “a是0到10的一个整数” } else { b = “a是大于10的一个整数” } 2、)if语句作为 三元运算符 在 Kotlin 中,if语句可以作为一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件

weixin_43864176的博客 1679

微带线贴片天线尺寸的计算,利用Matlab计算+常见的RF计算在线公式

微带线贴片天线尺寸的计算,利用Malatb计算 这几天在使用hfss对矩形天线仿真,每次改变频率和实验的材料,都要重新计算一遍,太麻烦了,所以用matlab进行计算。 知道天线的工作频率:f_r 介质板的介电常数:epsilon_r 介质板厚度:h 就可以计算出矩形天线的长:L 矩形天线的宽:W 对于下面公式的单位要注意,公式以及化简了,要注意单位 由于matlab中的变量不能用希腊字母代替,所以用了该字母的读音 代码如下: f_r=2.45; %工作频率,单位GHz epsilon_r=3.5;

weixin_43404609的博客 2万+

Kotlin 笔记 纯属娱乐萌新大佬绕道

///-----------------------for循环写法大全 //for循环 >=0 <1 特别注意区分大小写 for (j in 0 until 1) { print("i => $j \t") } //可增可减 <=12 >=10 ...

BirdEatBug的博客 313

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2740

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握

本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求;

getusushu的博客 411

koltin(四) 逻辑控制 if when 循环

kotlin if when for

luoj_616的专栏 1431

手把手教你学Simulink--巴特沃斯滤波器设计与实现仿真

巴特沃斯滤波器的设计目标是拥有尽可能平滑的通带响应,这意味着在通带内信号衰减最小且没有波动。这种类型的滤波器非常适合用于音频处理、生物医学信号处理以及其他需要高保真度的应用场景。根据应用需求的不同,可以选择低通、高通、带通或带阻滤波器。明确你的系统需求,如输入信号类型(正弦波、方波等)、滤波器类型(低通、高通、带通或带阻)、截止频率、滤波器阶数等。假设我们需要设计一个4阶低通巴特沃斯滤波器,其截止频率为1kHz,用来过滤掉高于1kHz的所有频率成分。

MHD0815的博客 449

Kotlin 循环语句详解

在讲解for-in前,先了解一下区间。区间是一种表示一系列连续值的数据结构,包括整数区间等,可以方便地用于循环遍历。下面详细介绍几种常见的区间类型及其在 for-in 循环中的使用方法。整数区间是最常用的区间类型,用于表示一系列连续的整数。循环,它们用于重复执行某段代码,直到满足特定条件为止,下面分别进行讲解。这个示例中,程序会先提示用户输入,然后检查输入是否为。如果需要反向遍历,可以使用 downTo 关键字。如果需要同时获取元素及其索引,可以使用。,如果不是则继续循环,直到用户输入。

充满智慧的博客 1215

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

kotlin 条件语句_Kotlin中写条件语句的新方法

kotlin 条件语句Ever since Kotlin was born, it has been one of the preferred languages to develop apps for Android devs around the globe. People love Kotlin for various reasons: extension functions, ease o...

weixin_26739079的博客 859

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android修行手册之Kotlin-【Null检查】、【类型检查】、【区间】、【条件语句】、【循环控制】

千军万马一将在,探囊取物有何难。 往期文章分享 点击跳转=>熬夜再战Android从青铜到王者-开发效率插件篇 点击跳转=>Unity粒子特效系列-龙卷风预制体做好了,unitypackage包直接用! 点击跳转=>姐姐喊我解锁套娃新技能:FairyGUI在Unity中实现List嵌套List/立体画廊等,玩出花儿来 点击跳转=>Unity新手必备5款宝藏插件–价值上千元白嫖最新版 爆肝万字C#基础入门大总结【建议收藏】 Android修行手册-玩转TextView,想不到有这.

空名先生 8458

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Kotlin的when、if 和循环语句

本文整理自:https://chiclaim.blog.youkuaiyun.com/article/details/88624808 一. when语句 在 Java 中有 switch 语句,在 Kotlin 中使用 when 来代替 switch 1) when 的基本语法 when(parameter){ branch1 -> logic branch2 -> l...

Robin Hu的专栏 2888

Kotlin For循环详解

前言 从今年的4月开始入手Kotlin到现在也有几个月时间了,在Kotlin当中循环算是这个语言当中的一个特点,最近Android上用Canvas在做游戏开发,循环也是写的非常多,发现在编写多变量的For循环无从下手,最后要不就是用Java写Kotlin调用,要不就是用While循环写,终于在今天我是解决了这个痛点,所以就打算写篇文章记录一下。 基本使用 在正式学习之前咱们先从最简单的For循环开始 从0循环到100 until关键字 until关键字在使用时左侧和右侧都需要一个数值,until循环是一个左

SanSanOtaku的博客 5万+

Kotlin条件控制及循环

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

2401_84121798的博客 724

Kotlin学习一:变量、函数、条件语句与循环语句

做好久 Android 开发,看 kotlin 代码,大概都看得懂,仔细看却看不懂。所以系统学习一下,入个门。 创建第一个项目 创建了第一个 kotlin 项目,只需要 java 改为 kotlin 即可: 编译报错: Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72. ... 修改并删除 jcenter() : repositories { mavenCentral() google()

wuqingsen1的博客 500

kotlin中的循环及条件语句

if条件语句 Kotlin中的if语句相比于Java有一个额外的功能:它是有返回值的,其返回值就是if语句每一个条件中最后一行代码的返回值。我们先来看一个例子: //找两个数中最大的一个数 fun largerNumber(num1:Int, num2:Int):Int{ var value = 0 if(num1>num2){ value = num1 } else{ value = num2 } return va.

Darling_sheeps的博客 345

Kotlin 条件和循环

Kotlin 条件if和when、循环for和while

Chanwing Chow的博客 1149

Kotlin(四) 条件语句

Kotlin中的条件语句主要有两种:if 和 when 1. if if语句基本和Java中的if语句没有多大的区别,比如在上篇文章Kotlin(三) 语法糖中,我们有个getMaxNum函数,就可以使用if语句来实现, fun getMaxNum( a : Int , b : Int) : Int { if ( a >=b) { return a }else{ return b } } 可以看出,Kotlin中的if和Java的if...

陌生人 616

【Android开发日志】Kotlin 与 条件语句(9)

Android Studio 4.0已发布,此教程已更新至4.0版本。 if条件语句when条件语句 程序逻辑语句分主要为三种:顺序语句、条件语句、循环语句。 顺序语句:按代码顺序一行一行执行。 条件语句:满足设定条件,执行指定语句,有if和when两种 循环语句:满足设定条件,循环执行指定语句,有while和for两种 下面我们主要讲解条件语句: if条件语句 if顾名思义,“如果“。一般用作if…else…, 我们来看如下写法; if (a > b){ // 若a大于b,将a的值传给sw.

Ly0309Xuan1111的博客 362
上一篇: Kotlin函数详解与使用示例
下一篇: Kotlin类对象与接口详解
TechNomad
博客等级 码龄2年 787粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值