Kotlin实战4-while和for循环

while循环

Kotlin的while循环和do-while循环的语法和java一样

1
2
3
4
5
6
7
8
// 当condition为true时执行
while (condition) {
// ...
}
// 第一次无条件执行,后当condition为true时执行
do {
// ...
} while(condition)

for循环

区间和数列

在Kotlin中,没有传统的JAVA for循环,为了替代这种最常见的for循环,Kotlin使用了区间的概念。

区间本质上是两个值的间隔,这两个值通常是数字,一个起始值,一个结束值。使用 .. 运算符表示区间:

1
val oneToTen = 1 .. 10 // ..是包含结束的封闭区间,包含10

使用when实现Fizz-Buzz游戏

1
2
3
4
5
6
7
8
9
10
11
fun fizzBuzz(i: Int) = when {
i % 15 == 0 -> "FizzBuzz "
i % 3 ==0 -> "Fizz "
i % 5 == 0 -> "Buzz "
else -> "$i "
}

for(i in 1..100) {
print(fizzBuzz(i))
}
// 1 2 Fizz 3 4 Buzz ....

我们修改规则,从100开始倒计数并且只计算偶数

1
2
3
4
for(i in 100 downTo 1 setp 2) {
print(fizzBuzz(i))
}
// Buzz 98 Fizz 94 92 FizzBuzz ....

因为..语法创建的始终是包含结束值得闭区间,若需要不包含结束值的半闭合区间,可以使用until函数,例如循环for(i in 0 until size),等同于for(i in 0 .. size -1),但前者更加方便,意图更加清晰。

迭代map

1
2
3
4
5
6
7
8
val binaryReps = TreeMap<Char, String>() // 字符的二进制map
for(c in 'A'..'F' ) {
val binary = Integer.toBinaryString(c.toInt()) //asc转二进制
binaryReps[c] = binary // 根据键c把值存到map中
}
for((letter, binary) in binaryReps) { // 迭代map,把键和值赋给变量
println('$letter = $binary')
}

使用”in”检查集合和区间的成员

使用in检查一个值是否在区间中,或者使用!in检查一个值是否不在区间中

1
2
fun isLetter(c: Char) = c in 'a'..'f'|| c in 'A'..'F'
fun isNotDigital(c: Char) = c !in '0'..'9'
0%