Kotlin 循环语句 #

一、for 循环 #

1.1 基本语法 #

kotlin
for (item in collection) {
    println(item)
}

1.2 遍历区间 #

kotlin
// 遍历 1 到 5
for (i in 1..5) {
    println(i)
}

// 遍历 1 到 4(不包含 5)
for (i in 1 until 5) {
    println(i)
}

// 降序遍历
for (i in 5 downTo 1) {
    println(i)
}

// 带步长
for (i in 1..10 step 2) {
    println(i)  // 1, 3, 5, 7, 9
}

for (i in 10 downTo 1 step 2) {
    println(i)  // 10, 8, 6, 4, 2
}

1.3 遍历数组 #

kotlin
val array = arrayOf("A", "B", "C", "D")

// 遍历元素
for (item in array) {
    println(item)
}

// 遍历索引
for (i in array.indices) {
    println("array[$i] = ${array[i]}")
}

// 同时获取索引和元素
for ((index, value) in array.withIndex()) {
    println("array[$index] = $value")
}

1.4 遍历集合 #

kotlin
val list = listOf("Kotlin", "Java", "Python")

// 遍历元素
for (lang in list) {
    println(lang)
}

// 遍历索引
for (i in list.indices) {
    println(list[i])
}

// 带索引遍历
for ((index, lang) in list.withIndex()) {
    println("$index: $lang")
}

1.5 遍历 Map #

kotlin
val map = mapOf(
    "Kotlin" to 1,
    "Java" to 2,
    "Python" to 3
)

// 遍历键值对
for ((key, value) in map) {
    println("$key -> $value")
}

// 只遍历键
for (key in map.keys) {
    println(key)
}

// 只遍历值
for (value in map.values) {
    println(value)
}

1.6 遍历字符串 #

kotlin
val str = "Kotlin"

// 遍历字符
for (char in str) {
    println(char)
}

// 遍历索引
for (i in str.indices) {
    println("str[$i] = ${str[i]}")
}

二、while 循环 #

2.1 基本语法 #

kotlin
var i = 1
while (i <= 5) {
    println(i)
    i++
}

2.2 条件控制 #

kotlin
var sum = 0
var i = 1

while (i <= 100) {
    sum += i
    i++
}

println("1到100的和: $sum")  // 5050

2.3 读取输入 #

kotlin
import java.util.Scanner

val scanner = Scanner(System.`in`)

while (scanner.hasNext()) {
    val input = scanner.next()
    if (input == "exit") break
    println("输入: $input")
}

三、do-while 循环 #

3.1 基本语法 #

kotlin
var i = 1
do {
    println(i)
    i++
} while (i <= 5)

3.2 至少执行一次 #

kotlin
var input: String
do {
    print("请输入密码: ")
    input = readLine() ?: ""
} while (input != "123456")

println("密码正确!")

3.3 菜单选择 #

kotlin
var choice: Int
do {
    println("=== 菜单 ===")
    println("1. 选项一")
    println("2. 选项二")
    println("0. 退出")
    print("请选择: ")
    
    choice = readLine()?.toIntOrNull() ?: -1
    
    when (choice) {
        1 -> println("选择了选项一")
        2 -> println("选择了选项二")
        0 -> println("退出")
        else -> println("无效选择")
    }
} while (choice != 0)

四、循环控制 #

4.1 break - 跳出循环 #

kotlin
for (i in 1..10) {
    if (i == 5) break
    println(i)  // 1, 2, 3, 4
}

4.2 continue - 跳过当前迭代 #

kotlin
for (i in 1..10) {
    if (i % 2 == 0) continue
    println(i)  // 1, 3, 5, 7, 9
}

4.3 标签 #

使用标签控制嵌套循环:

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

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

4.4 return #

kotlin
fun findFirstEven(numbers: List<Int>): Int {
    for (num in numbers) {
        if (num % 2 == 0) return num
    }
    return -1
}

五、迭代器 #

5.1 自定义迭代器 #

kotlin
class Countdown(val start: Int) : Iterable<Int> {
    override fun iterator(): Iterator<Int> {
        return object : Iterator<Int> {
            var current = start
            
            override fun hasNext(): Boolean = current > 0
            
            override fun next(): Int {
                return current--
            }
        }
    }
}

// 使用
for (i in Countdown(5)) {
    println(i)  // 5, 4, 3, 2, 1
}

5.2 迭代器操作符 #

kotlin
val list = listOf(1, 2, 3, 4, 5)

val iterator = list.iterator()
while (iterator.hasNext()) {
    println(iterator.next())
}

// 使用 listIterator(支持双向遍历)
val listIterator = list.listIterator(list.size)
while (listIterator.hasPrevious()) {
    println(listIterator.previous())
}

六、forEach 函数 #

6.1 基本用法 #

kotlin
val list = listOf("A", "B", "C")

list.forEach { item ->
    println(item)
}

// 使用 it
list.forEach {
    println(it)
}

6.2 forEachIndexed #

kotlin
val list = listOf("Kotlin", "Java", "Python")

list.forEachIndexed { index, item ->
    println("$index: $item")
}

6.3 forEach 与 for 循环对比 #

kotlin
// for 循环
for (item in list) {
    println(item)
}

// forEach
list.forEach { println(it) }

// 区别:forEach 中不能使用 break/continue
// list.forEach { 
//     if (it == "B") break  // 错误
// }

七、循环与函数式编程 #

7.1 map #

kotlin
val numbers = listOf(1, 2, 3, 4, 5)

// 使用 for 循环
val squares1 = mutableListOf<Int>()
for (n in numbers) {
    squares1.add(n * n)
}

// 使用 map
val squares2 = numbers.map { it * it }

7.2 filter #

kotlin
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

// 使用 for 循环
val evens1 = mutableListOf<Int>()
for (n in numbers) {
    if (n % 2 == 0) evens1.add(n)
}

// 使用 filter
val evens2 = numbers.filter { it % 2 == 0 }

7.3 reduce #

kotlin
val numbers = listOf(1, 2, 3, 4, 5)

// 使用 for 循环
var sum1 = 0
for (n in numbers) {
    sum1 += n
}

// 使用 reduce
val sum2 = numbers.reduce { acc, n -> acc + n }

八、实战示例 #

8.1 九九乘法表 #

kotlin
for (i in 1..9) {
    for (j in 1..i) {
        print("$j × $i = ${i * j}\t")
    }
    println()
}

8.2 斐波那契数列 #

kotlin
fun fibonacci(n: Int): List<Int> {
    val result = mutableListOf(0, 1)
    
    for (i in 2 until n) {
        result.add(result[i - 1] + result[i - 2])
    }
    
    return result.take(n)
}

println(fibonacci(10))  // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

8.3 冒泡排序 #

kotlin
fun bubbleSort(arr: IntArray) {
    for (i in 0 until arr.size - 1) {
        for (j in 0 until arr.size - 1 - i) {
            if (arr[j] > arr[j + 1]) {
                val temp = arr[j]
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
            }
        }
    }
}

8.4 查找素数 #

kotlin
fun findPrimes(max: Int): List<Int> {
    val primes = mutableListOf<Int>()
    
    for (num in 2..max) {
        var isPrime = true
        for (i in 2..Math.sqrt(num.toDouble()).toInt()) {
            if (num % i == 0) {
                isPrime = false
                break
            }
        }
        if (isPrime) primes.add(num)
    }
    
    return primes
}

九、最佳实践 #

9.1 选择合适的循环 #

kotlin
// 已知次数 → for 循环
for (i in 1..100) { }

// 条件控制 → while 循环
while (condition) { }

// 至少执行一次 → do-while 循环
do { } while (condition)

// 遍历集合 → forEach 或 for-in
list.forEach { }
for (item in list) { }

9.2 避免无限循环 #

kotlin
// 危险:可能无限循环
while (true) {
    // 忘记更新条件
}

// 安全:添加退出条件
var count = 0
while (count < 100) {
    count++
}

9.3 使用函数式替代 #

kotlin
// 不推荐
val result = mutableListOf<String>()
for (item in list) {
    if (item.startsWith("A")) {
        result.add(item.uppercase())
    }
}

// 推荐
val result = list
    .filter { it.startsWith("A") }
    .map { it.uppercase() }

十、总结 #

循环语句要点:

循环类型 用途 特点
for 遍历区间/集合 最常用
while 条件循环 先判断后执行
do-while 条件循环 先执行后判断
forEach 遍历集合 函数式风格

下一步,让我们学习 循环控制

最后更新:2026-03-27