一.判断结构。
if语句。
- 传统写法(同Java写法一样)
var a: Int = 1
var b: Int = 2
var max: Int = 0
//基本用法
if (a > b) {
max = a
} else {
max = b
}
- 作为表达式使用。也就是说,整个 if 表达式(包括 else 部分)最终 会返回一个值,因此 if 可以代替 Java 中的三目运算符。(Kotlin中没有java中的三元表达式)
var age = 20
// 将 if 表达式赋值给 str 变量
var str = if (age > 20) "age大于20"
else if (age < 20) "age小于20" else "age等于20"
println(str)
注意:Kotlin中没有java的中的2>1?2:1这样的三元表达式。
二.选择结构。
when表达式。
when 类似其他语言的 switch 操作符。
在 when 中,else 如同 switch 的 default。如果其他分支都不满足条件将会走else 分支,如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔。
when (a) {
1 -> print("x == 1")
2 -> print("x == 2")
3, 4 -> print("x == 3 or x == 4")
in 5..9 -> print("x in [5..9]")
!in 10..20 -> print("x is outside the range")
else -> {
print("x is funny")
}
}
when也可以用来取代if-else-if链。如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支:
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
三循环结构。
for循环.
val stringArrays : Array<String> = arrayOf("hello","kotlin","hello","android")
for (item in stringArrays){
println(item)
}
while 与 do...while 循环.
while是最基本的循环
while( 布尔表达式 ) {
//循环内容
}
do…while 循环 对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);
四.流程控制.
- break。终止最直接包围它的循环,和java没啥区别。
- continue。继续下一次最直接包围它的循环,和java没啥区别。
- return。默认从最直接包围它的函数或者匿名函数返回。
使用break结束循环
需要在某种条件出现时强行中止循环,而不是等到循环条件为false时才退出循环,可以使用break来完成此功能。
break用于完全结束一个循环,跳出循环体。
for (i in 0..10) {
println("i的值是:${i}")
if (i == 2) {
//结束循环
break
}
}
输出结果:
i的值是:0
i的值是:1
i的值是:2
使用break语句不仅可以结束其所在的循环,还可以直接结束其外层循环。需要在break后紧跟一个标签,用于标识一个外层循环。
Kotlin中的标签就是一个紧跟着@的标识符。Kotlin中的标签只有放在循环语句或switch语句之前才起作用。
//外层循环
outer@ for (i in 0..10) {
for (j in 0 until 3) {
println("i的值为:${i},j的值为:${j}")
if (j == 1) {
//跳出outer标签所标识的循环
break@outer
}
}
}
输出结果:
i的值为:0,j的值为:0
i的值为:0,j的值为:1
break后的标签必须是一个有效的标签,即这个标签必须在break语句所在的循环之前定义,或在其所在循环的外层循环之前定义。
使用continue忽略本次循环的剩下语句
continue和break有点类似,区别是:
continue只是忽略本次循环的剩下语句,接着开始下一次循环,并不会中止循环;
break则是完全中止循环本身。
for (i in 0 until 3) {
println("i的值是${i}")
if (i == 1) {
//忽略本次循环的剩下语句
continue
}
println("continue后的输出语句")
}
输出结果:
i的值是0
continue后的输出语句
i的值是1
i的值是2
continue后的输出语句
continue也可以紧跟一个标签,用于直接跳过标签所标识循环的档次循环剩下语句,重新开始下一次循环。
//外层循环
outer@ for (i in 0 until 5) {
//内层循环
for (j in 0 until 3) {
println("i的值为:${i},j的值为:${j}")
if (j == 1) {
//忽略outer标签所指定的循环中档次循环剩下的语句
continue@outer
}
}
}
输出结果:
i的值为:0,j的值为:0
i的值为:0,j的值为:1
i的值为:1,j的值为:0
i的值为:1,j的值为:1
i的值为:2,j的值为:0
i的值为:2,j的值为:1
i的值为:3,j的值为:0
i的值为:3,j的值为:1
i的值为:4,j的值为:0
i的值为:4,j的值为:1
使用return结束方法
return用于从最直接包围它的方法、函数或者匿名函数返回。
当函数或方法执行到一条return语句时,这个函数或方法将被结束。
fun main(args: Array<String>) {
test()
}
fun test(){
for (i in 0 until 10) {
println("i的值是:${i}")
if (i == 1) {
return
}
println("return后的输出语句")
}
}
输出结果:
i的值是:0
return后的输出语句
i的值是:1
return并不是专门用于控制循环结构的关键字,但通过return语句确实可以结束一个循环。
与continue和break不同的是,return直接结束整个函数或方法,而不管return处于多少层循环之内。