Kotlin系列三(kotlin中的流程控制)
五.kotlin中的流程控制
条件语句
- kotlin中有"if"条件语句和"when"语句两种
- kotlin中没有"switch"条件语句
- kotlin中的"if"语句和"when"语句还可以当作表达式使用,即用有返回值
"if"条件语句
//if单分支
if(条件表达式){
代码块
}
//if else双分支
if(条件表达式){
代码块一
}else{
代码块二
}
//if elseif else多分支
if(条件表达式一){
代码块一
}else if(条件表达式二){
代码块二
}else{
代码块三
}
val num = 3;
//1.if循环
//1.1if单分支,满足if条件表达式才会执行代码块里的代码
//变量num的值大于0
if(num > 0){
println("变量num的值大于0");
}
//1.2if else双分支,满足if条件表达式才会执行代码块里的代码,不满足则执行else代码块里的代码
//变量num的值大于0
if(num > 0){
println("变量num的值大于0");
}else{
println("变量num的值不大于0");
}
//1.3if elseif if多分支,从次序判断if和elseif中的条件表达式,如果满足则执行代码块里的代码,且只会有一个代码块被执行,都不满足则执行else代码块里的代码
//变量num的值等于3
if (num > 3){
println("变量num的值大于3");
}else if (num < 3){
println("变量num的值小于0");
}else{
println("变量num的值等于3");
}
"if"表达式语句
- "if"表达式返回值是满足条件分支的最后一行语句的执行结果,不需要使用"return"关键字
- "if"单分支表达式可以实现其他编程语言中三元表达式的效果
//2.if表达式
//2.1单分支表达式
var result = if(num>3){
true
} else{
false
};
//简化写法
// var result = if(num>3) true else false;
//if单分支表达式的结果result = false
println("if单分支表达式的结果result = $result");
val result2 = if(num >3){
"变量num的值大于3";
}else if (num < 3){
"变量num的值小于3";
}else{
"变量num的值等于3";
}
//if多分支表达式的结果result2 = 变量num的值等于3
println("if多分支表达式的结果result2 = $result2");
"when"条件语句
- 与其他编程语言中的"switch"语句类似
- 但"when"语句只有在条件表达式为true的情况下才会执行代码块里的内容
- 且如果满足多个条件表达式,对应的代码块都会被执行
- 只有所有条件都不满足时才会执行else代码块的语句
- 注意最后的else代码块不能省略,可以省略大括号
- 语法格式
when(变量){
条件一 ->{
代码块一
}
条件二 ->{
代码块二
}
else -> {
else代码块
}
}
//3.when条件语句,注意最后的else代码块不能省略
val language = "Kotlin";
when(language){
"Java" -> {
println("我在学Java");
}
"Kotlin" -> {
println("我在学Kotlin");
}
else -> {
println("我在学其他语言");
}
}
//简化写法,可以省略小括号和大括号
when(language){
"Java" -> println("我在学Java");
"Kotlin" -> println("我在学Kotlin");
else -> println("我在学其他语言");
}
"when"代码块
- "when"代码块可以多组逻辑不一致的"if"条件聚合到一起
- 语法格式,比正常的"when"语句缺少传递的参数
when{
条件一 ->{
代码一
}
条件二 ->{
代码块二
}
else ->{
else代码块
}
}
//4.when代码块
val age = 18;
when{
3+5==8 ->{
println("3+5=8");
}
age >= 18 ->{
println("我已经成年了");
}
else ->{
println("我是else代码块的内容");
}
}
//简写
when{
3+5==8 ->println("3+5=8");
age >= 18 -> println("我已经成年了");
else -> println("我是else代码块的内容");
}
"when"表达式
- "when"表达式与"if"表达式类似,都是以满足条件的代码块的最后一行语句的执行结果作为返回值
//5.when表达式
val result3 = when(language){
"Kotlin" -> "我会Kotlin语言";
"Java" -> "我会Java语言"
else -> "我会其他语言";
}
//when表达式的结果result3 = 我会Kotlin语言
println("when表达式的结果result3 = $result3");
"when"语句的多种案例
- 参数是否与给定值相同
val language = "Kotlin";
when(language){
"Java" -> println("我在学Java");
"Kotlin" -> println("我在学Kotlin");
else -> println("我在学其他语言");
}
- 参数是否在一组值中
val language = "Kotlin";
when(language){
"Java","Kotlin" -> {
println("我在学编程语言");
}
"语文","数学" ->{
println("我在学文化课");
}
else->{
println("我在其他课程");
}
}
- 参数是否在指定区间
when(20){
in 1..100 ->{
println("20在1到100之间");
}
in 101..200 ->{
println("20在101到200之间");
}
else ->{
println("20不在1到200之间");
}
}
- 参数是否不在指定区间
when(20){
!in 1..100 ->{
println("20不在1到100之间");
}
!in 101..200 ->{
println("20不在101到200之间");
}
else ->{
println("20在1到200之间");
}
}
- 参数是否属于指定数据类型
var date = Date();
when(date){
is Number ->{
println("变量date属于Number类型");
}
is Date -> {
println("变量date属于Date类型");
}
else ->{
println("变量date属于其他数据类型类型");
}
}
- 参数是否不属于指定数据类型
var date = Date();
when(date){
!is Number ->{
println("变量date属于不Number类型");
}
!is Date -> {
println("变量date不属于Date类型");
}
else ->{
println("变量date属于其他数据类型类型");
}
}
循环语句
- kotlin中有"while"循环,,"do while"循环,"for"循环和"repeat"循环四种
"while"循环
- 先判断条件是否成立,如果成立则执行代码块的内容,不成立的则退出循环
- 语法格式
while(条件表达式){
代码块
}
//1.while循环,先判断后执行
val max = 3;
var count = 0;
while(count < max){
println("当前的count值为:${count++}");
}
"do while"循环
do{
代码块
}while(条件)
//2.do-while循环,先执行一次,然后再进行判断
count = 0;
do{
println("当前的count值为:${count++}");
}while (count < max)
"for"循环
- kotlin中的"for"循环类似Java中的"forEach"循环
- kotlin中的"for"循环,只能变量区间对象(数组,集合等等),或是实现Iterable接口的类
- 语法格式
for(变量标识 in 区间对象/实现Iterable接口的类){
代码块
}
//3.for循环,支持迭代器,数组,字符串
val arr = arrayOf(1,2,3,4,5);
//for循环遍历数组
for (v in arr) {
println("当前的值为:${v}");
}
//for遍历区间对象
for( v in 0..10){
println("for循环中的值为:${v}");
}
"repaeat"循环
- "repeat"循环用于执行固定次数的代码片段
- "repeat"循环有一个隐式参数"it",表示当前循环的次数,从0开始计数
- 语法格式
repeat(循环次数){
代码块
}
//4.repeat循环,repeat循环有一个隐式参数"it",表示当前循环的次数
repeat(5){
println("repeat循环,当前的次数为:${it}");
}
"continue"关键字跳过一次循环
//5.continue跳过本次循环
for(i in 1..5){
//遍历到3就跳过本次循环
if(i==3){
continue;
}
println("continue关键字的使用,当前的值为:${i}");
}
"break"关键字退出循环
//6.break跳出循环
for (i in 1..5){
//遍历到3就退出循环
if(i==3){
break;
}
println("break关键字的使用,当前的值为:${i}");
}
kotlin标签语法在循环中的使用
- kotlin的标签语法有点类似C语言中的"goto"关键字
- 标签名由标识符和"@"字符组成 ,"@"字符必须在标识符的最后
- 定义标签的时候"@"字符在标识符最后,使用标签的使用"@"字符在标识符最前
- 使用kotlin的标签语法可以实现跳过多层循环或退出多层循环
//7.kotlin中的标签语法
//标签,定义标签的时候"@"字符在标识符最后
outer@
for (i in 1..5){
for (j in 1..5){
if (j==3){
//跳转到指定标签处,使用标签的使用"@"字符在标识符最前
//即可以配合break使用,也可以配合continue使用
// break@outer;
continue@outer;
}
println("当前的i值为:${i},当前的j值为:${j}");
}
}