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

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

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

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

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

一、Kotlin 条件语句

Kotlin 中常用的条件语句有:

kotlin 复制代码
if
if else
if else if
when

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


1. if 条件语句

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

基本格式:

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

示例:

kotlin 复制代码
val age = 18

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

输出结果:

text 复制代码
已经成年

这里的判断逻辑是:

kotlin 复制代码
age >= 18

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


2. if else 条件语句

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

基本格式:

kotlin 复制代码
if (条件表达式) {
    条件成立时执行
} else {
    条件不成立时执行
}

示例:

kotlin 复制代码
val age = 16

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

输出结果:

text 复制代码
未成年

3. if else if 多条件判断

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

基本格式:

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

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

kotlin 复制代码
val score = 85

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

输出结果:

text 复制代码
良好

执行过程:

text 复制代码
score >= 90 不成立
score >= 80 成立
所以输出:良好

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


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

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

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

示例:

kotlin 复制代码
val a = 10
val b = 20

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

println(max)

输出结果:

text 复制代码
20

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

kotlin 复制代码
val max = if (a > b) a else b

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


5. if 表达式通常需要 else

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

错误写法:

kotlin 复制代码
val age = 16

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

正确写法:

kotlin 复制代码
val age = 16

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

也可以简写:

kotlin 复制代码
val result = if (age >= 18) "成年人" else "未成年人"

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

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

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

示例:

kotlin 复制代码
val username = "admin"

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

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

kotlin 复制代码
val name = "Kotlin"

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

7. 逻辑运算符

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

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

7.1 && 并且

kotlin 复制代码
val age = 20
val hasTicket = true

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

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

text 复制代码
可以入场

7.2 || 或者

kotlin 复制代码
val isVip = false
val isAdmin = true

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

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

text 复制代码
允许访问

7.3 ! 取反

kotlin 复制代码
val isLogin = false

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

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

text 复制代码
请先登录

8. Android 中常见 if 使用场景

8.1 判断输入是否为空

kotlin 复制代码
val username = usernameEditText.text.toString()

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

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


8.2 判断密码长度

kotlin 复制代码
val password = passwordEditText.text.toString()

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

8.3 登录表单校验

kotlin 复制代码
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 是否显示

kotlin 复制代码
if (progressBar.visibility == View.VISIBLE) {
    progressBar.visibility = View.GONE
} else {
    progressBar.visibility = View.VISIBLE
}

8.5 判断网络状态

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

9. when 条件语句

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

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

基本格式:

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

示例:

kotlin 复制代码
val day = 1

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

输出结果:

text 复制代码
星期一

10. when 可以匹配多个值

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

kotlin 复制代码
val day = 6

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

输出结果:

text 复制代码
周末

11. when 可以判断范围

when 可以结合 in 判断范围。

kotlin 复制代码
val score = 85

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

输出结果:

text 复制代码
良好

这里:

kotlin 复制代码
in 80..89

表示 score 在 80 到 89 之间。


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

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

kotlin 复制代码
val score = 85

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

println(level)

输出结果:

text 复制代码
良好

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


13. when 不带参数

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

kotlin 复制代码
val score = 85

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

这种写法等价于:

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

14. when 判断类型

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

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

调用:

kotlin 复制代码
checkType("Hello")
checkType(100)
checkType(true)

输出结果:

text 复制代码
这是字符串,长度是:5
这是整数,值是:100
这是布尔值:true

注意:

kotlin 复制代码
is String

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

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

kotlin 复制代码
value.length

15. when 判断枚举类型

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

kotlin 复制代码
enum class LoginState {
    SUCCESS,
    FAILED,
    LOADING
}

使用 when 判断:

kotlin 复制代码
val state = LoginState.SUCCESS

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

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


16. Android 中常见 when 使用场景

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

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

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

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

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

16.2 根据页面状态更新 UI

kotlin 复制代码
enum class PageState {
    LOADING,
    SUCCESS,
    ERROR,
    EMPTY
}
kotlin 复制代码
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 根据接口返回码处理结果

kotlin 复制代码
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

简单判断:

kotlin 复制代码
if (isLogin) {
    println("已登录")
} else {
    println("未登录")
}

多个固定值匹配:

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

范围判断:

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

18. 完整示例:登录判断

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

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

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

    println("登录成功")
}

调用:

kotlin 复制代码
login("", "123456")
login("admin", "123")
login("admin", "123456")

输出结果:

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

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


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

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

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

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

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

调用:

kotlin 复制代码
updateUi(UiState.Loading)
updateUi(UiState.Success)

输出结果:

text 复制代码
显示加载中
显示内容

20. 条件语句总结

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

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

常用写法:

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

对于 Android Kotlin 开发来说:

text 复制代码
简单判断用 if,多状态判断用 when。

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


二、Kotlin 循环语句

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

比如:

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

Kotlin 中常用的循环方式有:

kotlin 复制代码
for
while
do while
repeat

其中最常用的是 for 循环。


1. for 循环

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

基本格式:

kotlin 复制代码
for (变量 in 数据范围) {
    循环体
}

示例:

kotlin 复制代码
for (i in 1..5) {
    println(i)
}

输出结果:

text 复制代码
1
2
3
4
5

这里:

kotlin 复制代码
1..5

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


2. 使用 .. 表示闭区间

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

kotlin 复制代码
for (i in 1..10) {
    println(i)
}

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

示例:

kotlin 复制代码
for (i in 1..3) {
    println("第 $i 次循环")
}

输出结果:

text 复制代码
第 1 次循环
第 2 次循环
第 3 次循环

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

until 表示不包含结束值。

kotlin 复制代码
for (i in 1 until 5) {
    println(i)
}

输出结果:

text 复制代码
1
2
3
4

这里不包含 5。

等价理解:

kotlin 复制代码
1 until 5

表示从 1 到 4。

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

kotlin 复制代码
val names = listOf("张三", "李四", "王五")

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

4. 使用 downTo 倒序循环

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

kotlin 复制代码
for (i in 5 downTo 1) {
    println(i)
}

输出结果:

text 复制代码
5
4
3
2
1

示例:

kotlin 复制代码
for (count in 3 downTo 1) {
    println("倒计时:$count")
}

println("开始")

输出结果:

text 复制代码
倒计时:3
倒计时:2
倒计时:1
开始

5. 使用 step 设置步长

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

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

kotlin 复制代码
for (i in 1..10 step 2) {
    println(i)
}

输出结果:

text 复制代码
1
3
5
7
9

倒序也可以使用 step:

kotlin 复制代码
for (i in 10 downTo 1 step 2) {
    println(i)
}

输出结果:

text 复制代码
10
8
6
4
2

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

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

7. 遍历数组

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

kotlin 复制代码
val names = arrayOf("张三", "李四", "王五")

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

输出结果:

text 复制代码
张三
李四
王五

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


8. 遍历集合 List

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

kotlin 复制代码
val languages = listOf("Kotlin", "Java", "C++")

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

输出结果:

text 复制代码
Kotlin
Java
C++

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


9. 遍历集合下标

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

kotlin 复制代码
val names = listOf("张三", "李四", "王五")

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

输出结果:

text 复制代码
下标:0,姓名:张三
下标:1,姓名:李四
下标:2,姓名:王五

这里:

kotlin 复制代码
names.indices

表示集合的下标范围。

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

text 复制代码
0..2

10. 同时遍历下标和元素

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

kotlin 复制代码
val names = listOf("张三", "李四", "王五")

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

输出结果:

text 复制代码
下标:0,姓名:张三
下标:1,姓名:李四
下标:2,姓名:王五

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


11. 遍历 Map

Map 是键值对集合。

kotlin 复制代码
val userMap = mapOf(
    "name" to "张三",
    "age" to "18",
    "city" to "北京"
)

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

输出结果:

text 复制代码
key:name,value:张三
key:age,value:18
key:city,value:北京

这里:

kotlin 复制代码
(key, value)

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


12. while 循环

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

基本格式:

kotlin 复制代码
while (条件) {
    循环体
}

示例:

kotlin 复制代码
var count = 1

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

输出结果:

text 复制代码
1
2
3
4
5

执行流程:

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

13. while 循环使用场景

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

例如:

kotlin 复制代码
var retryCount = 0

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

输出结果:

text 复制代码
第 1 次重试
第 2 次重试
第 3 次重试

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


14. do while 循环

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

基本格式:

kotlin 复制代码
do {
    循环体
} while (条件)

示例:

kotlin 复制代码
var count = 1

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

输出结果:

text 复制代码
1
2
3
4
5

15. do while 和 while 的区别

while 是先判断,再执行。

kotlin 复制代码
var count = 10

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

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

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

kotlin 复制代码
var count = 10

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

输出结果:

text 复制代码
10

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

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

16. repeat 重复执行

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

kotlin 复制代码
repeat(5) {
    println("Hello Kotlin")
}

输出结果:

text 复制代码
Hello Kotlin
Hello Kotlin
Hello Kotlin
Hello Kotlin
Hello Kotlin

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


17. repeat 中获取下标

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

kotlin 复制代码
repeat(3) { index ->
    println("当前下标:$index")
}

输出结果:

text 复制代码
当前下标:0
当前下标:1
当前下标:2

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

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

kotlin 复制代码
repeat(3) { index ->
    println("第 ${index + 1} 次执行")
}

输出结果:

text 复制代码
第 1 次执行
第 2 次执行
第 3 次执行

18. break 跳出循环

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

示例:

kotlin 复制代码
for (i in 1..10) {
    if (i == 5) {
        break
    }
    println(i)
}

输出结果:

text 复制代码
1
2
3
4

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


19. continue 跳过本次循环

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

示例:

kotlin 复制代码
for (i in 1..5) {
    if (i == 3) {
        continue
    }
    println(i)
}

输出结果:

text 复制代码
1
2
4
5

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


20. break 和 continue 的区别

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

break 示例:

kotlin 复制代码
for (i in 1..5) {
    if (i == 3) {
        break
    }
    println(i)
}

输出结果:

text 复制代码
1
2

continue 示例:

kotlin 复制代码
for (i in 1..5) {
    if (i == 3) {
        continue
    }
    println(i)
}

输出结果:

text 复制代码
1
2
4
5

21. 嵌套循环

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

kotlin 复制代码
for (i in 1..3) {
    for (j in 1..3) {
        println("i = $i, j = $j")
    }
}

输出结果:

text 复制代码
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 只能跳出当前这一层循环。

kotlin 复制代码
for (i in 1..3) {
    for (j in 1..3) {
        if (j == 2) {
            break
        }
        println("i = $i, j = $j")
    }
}

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

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

输出结果:

text 复制代码
i = 1, j = 1

这里:

kotlin 复制代码
break@outer

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


23. 带标签的 continue

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

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

执行逻辑是:

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

输出结果:

text 复制代码
i = 1, j = 1
i = 2, j = 1
i = 3, j = 1

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

24.1 遍历列表数据

kotlin 复制代码
val userList = listOf("张三", "李四", "王五")

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

24.2 遍历控件列表

kotlin 复制代码
val viewList = listOf(textView1, textView2, textView3)

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

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


24.3 批量设置按钮点击事件

kotlin 复制代码
val buttons = listOf(button1, button2, button3)

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

24.4 遍历数据并筛选

kotlin 复制代码
val names = listOf("Kotlin", "Java", "Android", "Jetpack")

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

输出结果:

text 复制代码
Kotlin
Android
Jetpack

24.5 查找指定数据

kotlin 复制代码
val names = listOf("张三", "李四", "王五")

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

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


24.6 表单批量校验

kotlin 复制代码
val inputList = listOf(username, password, phone)

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

25. forEach 遍历集合

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

kotlin 复制代码
val names = listOf("张三", "李四", "王五")

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

输出结果:

text 复制代码
张三
李四
王五

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

kotlin 复制代码
names.forEach {
    println(it)
}

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

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

kotlin 复制代码
val names = listOf("张三", "李四", "王五")

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

输出结果:

text 复制代码
下标:0,姓名:张三
下标:1,姓名:李四
下标:2,姓名:王五

27. for 和 forEach 怎么选择?

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

需要注意:

kotlin 复制代码
forEach

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

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


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

Java 中常见写法:

java 复制代码
for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

Kotlin 中不这样写。

Kotlin 推荐使用:

kotlin 复制代码
for (i in 0 until 10) {
    println(i)
}

或者:

kotlin 复制代码
repeat(10) { i ->
    println(i)
}

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

kotlin 复制代码
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("存在未填写内容")
    }
}

输出结果:

text 复制代码
表单校验通过

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

kotlin 复制代码
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)
}

输出结果:

text 复制代码
[Kotlin, Android, Jetpack]

这里:

kotlin 复制代码
continue

用于跳过空字符串。


31. 循环语句总结

Kotlin 中常用循环方式如下:

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

常用写法:

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

循环控制关键字:

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

对于 Android Kotlin 开发来说:

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

最后记住一句话:

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

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

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

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

kotlin 复制代码
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 合格")
        }
    }
}

输出结果:

text 复制代码
用户名 admin 合格
发现空用户名,已跳过
用户名 Tom 长度不足
用户名 ZhangSan 合格
发现空用户名,已跳过

这个例子中:

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

四、最终总结

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

条件语句主要用于判断:

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

循环语句主要用于重复:

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

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

场景 推荐写法
简单条件判断 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 中的业务逻辑、页面状态处理、表单校验和列表数据处理代码。

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work3 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work3 天前
ch21 签名、校验与发版
kotlin
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui