Kotlin流程控制
1. 分支结构
1.1 if
(1)if分支
if分支有三种结构,分别是
//第一种
if () {
}
//第二种
if () {
} else {
}
//第三种 可以跟多个else if
if () {
} else if () {
} else if () {
} ………
else 是对前一if条件的取反
(2) if表达式
if 作为表达式时,可以代替java中的三目运算符?。
for (i in 1..5) {
val age= Random.nextInt(50);
val str = if (age > 18) "成年人" else "未成年人"
println("age=$age 是 $str")
}
作为表达式时,必须返回值,因此有if必须有else。和if分支相同的是,可以用{}在后面跟代码块,代码块的最后一行表达式将作为代码块的值返回。
val age = Random.nextInt(50);
val str = if (age > 18) {
print(age)
"成年人"
} else {
print(age)
"未成年人"
}
1.2 when
(1)when分支
when分支代替了java中的switch分支
val score = "A";
when (score) {
"A" -> println("优秀");
"B" -> println("良好");
"C" -> println("价格");
"D" -> println("不及格");
else -> println("缺考");
}
如果每个case包含多个语句,需要{}包裹;此外如果同时包含两个条件,可以用,分割。
val score = "A";
when (score) {
"A","B" -> {
println("优秀");
println("这次考的很棒");
}
"C" -> println("价格");
"D" -> println("不及格");
else -> println("缺考");
}
when分支不一定要常量或者字面量,可以是表达式,甚至可以是对象.如下所示,当when分支是对象是,会调用equals方法进行比较,如果true就会走该分支。
class Student {
var major: String? = null;
override fun equals(other: Any?): Boolean {
if (this.major==(other as Student).major) return true
return false;
}
override fun hashCode(): Int {
return major?.hashCode() ?: 0
}
}
fun main() {
val student = Student();
student.major="11";
val student2=Student();
student2.major="1121";
when (student) {
student2-> {
println("是一个人");
}
else -> println("不是一个人");
}
}
(2) when表达式
和if表达式相同,when也可以作为表达式,返回的值为符合when条件分支代码块的最后一个表达式的值。
val string = when (student) {
student2 -> {
println("是一个人");
"1";
}
else ->{
println("不是一个人");
"2"
}
}
(3)when分支处理范围
可以通过in !in判断when条件是否满足分支的区间,例如
val age = 33;
val str = when (age) {
in 0..18 -> "未成年人"
in 19..30 -> "青年"
in 31..60 -> "中年人"
else -> "老年人"
}
//输出中年人
println(str)
(4)when分支处理类型
val age:Any= 33;
val str = when (age) {
is String -> "String类型"
is Int -> "Int类型"
is Float -> "Float类型"
else -> "其他类型"
}
println(str)
(5)when条件分支
可以用来代替if else if分支,此时when分支不需要提供表达式,每个分支都是一个表达式,当为true时,走该分支。
2. 循环结构
2.1 while循环
var age:Int= 0;
while(age<10){
age++;
}
2.2 do while
和while的区别在于会先执行一次,然后在进行while判断
2.3for in循环
for(num in 1..10){
//循环内容
}
in前面的常量无需定义,in后面可以跟集合list 字符串 string 区间等
2.4嵌套循环
这个很常见,就是for循环包着另一个for循环。
for (num in 1..10) {
for(num2 in 2..num){
//循环内容
}
}
3.控制循环结构
3.1 break结束循环
break用于跳出循环
for (num in 1..10) {
if (num == 2) {
break;
}
}
当break在嵌套循环中时,break只跳出本层的循环。如下例所示,break只会跳出num2的循环。
for (num in 1..10) {
for(num2 in 2..num){
if (num2 == 2) {
break;
}
}
}
除了可以跳出本层循以外,还可以通过@跳出外层的循环
outer@ for (num in 1..10) {
for (num2 in 2..num) {
if (num2 == 2) {
break@outer;
}
}
}
3.2 continue
continue可以跳过本次循环的剩余内容,注意和break的区别
3.3用return结束方法
使用return可以直接从本方法跳出,返回之前调用本方法的地方继续执行。