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