Kotlin 条件和循环

条件

条件语句可以让程序在满足特定条件时执行相应语句。这个特定条件最终值是Boolean类型,当它为true时,会执行相应内容。

if

if (条件) ...
if (条件) ... else
if (条件) ... else if ... else ...

下面是一个简单的例子

fun main() {
	val int = 1
	if (int > 0) {
		print("int 大于 0")
	}
}
int 大于 0

if语句后边只跟了一个语句时,可以省略花括号{}

fun main() {
	val int = 1
	if (int > 0) print("int 大于零")
}

Note:省略花括号{}时,if/else只作用于其后边的第一个语句

fun main() {
	val int = 0
	if (int > 0) print("只有在大于 0 时我才执行"); print("无论何时我都执行")
}
无论何时我都执行

我们还可以添加else,你可以尝试更改int的值,看看运行结果:

fun main() {
	val int = 0
	if (int > 0) {
		print("int 大于 0")
	}else {
		print("int 小于等于 0")
	}
}
int 小于等于 0

如果有两个以上的条件,还可以添加else if,可以加多个:

fun main() {
    val int = 1

    // 不一定需要写 else
    if (int > 0) println("int > 0")
    else if(int < 0) println("int < 0")

    if (int > 0) println("int > 0")
    else if(int == 0) println("int = 0")
    else println("int < 0")

    if (int > 1) print("int > 1")
    else if (int > 0) print("0 < int <= 1")
    else if (int == 0) print("int = 0")
    else print("int < 0")
}
int > 0
int > 0
0 < int <= 1

if语句还可以用于赋值:

fun main() {
    val int = 1

    val msg = if (int > 0) "int > 0" else "int <= 0"

    print(msg)
}
int > 0

当包含多个语句时,末尾的值将作为其值:

fun main() {
    val int = 1

    val result = if (int > 0) {
        println("int > 0")
        true
    } else {
        println("int <= 0")
        false
    }

    print(result)
}
int > 0
true

when

when(变量) {
	值1 -> ...
	值2 -> ...
	...
	else -> ...
}

when {
	条件1 -> ...
	条件2 -> ...
	...
	else -> ...
}

同样地,else语句不一定需要;当分支的语句只有一句时,花括号{}也可以省略:

fun main() {
    val name = "Kotlin"
    var flag = false // 当 name 为 Kotlin 时改为 true

    print("Hello ")
    when(name) {
        "Kotlin" -> {
            println("Kotlin")
            flag = true
        }
        "Java" -> println("Java")
        else -> println("Unknown")
    }

    print(flag)
}
Hello Kotlin
true
fun main() {
    val name = "ABC"
    val canPrint = true

    when {
        name == "Kotlin" && canPrint -> 
            print("Hello Kotlin")
        canPrint -> print("Unknown")
    }
}
Unknown

when也可以用于赋值,此时else分支不可省略(除非分支涵盖了可能的所有情况):

fun main() {
    val isKotlin = true

    val name = when(isKotlin) {
        true -> "Kotlin"
        else -> "others"
    }

    print(name)
}
Kotlin
fun main() {
    val isKotlin = true

	// isKotlin 只有两个值,所以这里不需要 else
    val name = when(isKotlin) {
        true -> "Kotlin"
        false -> "others"
    }

    print(name)
}
Kotlin
fun main() {
    val isKotlin = true

    val name = when {
        isKotlin -> {
            println("Hello Kotlin")
            "Kotlin"
        }
        else -> "others"
    }

    print(name)
}
Hello Kotlin
Kotlin

循环

循环指是让程序重复地做某件事。

for

for (元素名: 类型 in 变量) ...

因为类型推断的存在,我们不需要显式指定类型

for (元素名: 类型 in 变量) ...

打印出String中的每一个字符:

fun main() {
    val kotlin = "Kotlin"

    for (char in kotlin) {
        println(char)
    }
}
K
o
t
l
i
n

打印出数组中的元素:

fun main() {
    val array = arrayOf(3, 2, 1)

    for (int in array) println(int)
}
3
2
1

Note:能够使用for语法的变量(in后面的)都是具有一个标记为operatoriterator(): Iterator<T>函数(或者叫方法,在类中的叫法),这是数组的interator()

public class Array<T> {
	...

	/**
	* Creates an [Iterator] for iterating over the elements of the array.
	*/
	public operator fun iterator(): Iterator<T>
}

使用withIndex()方法结合解构可以遍历下标+元素值:

fun main() {
    val array = arrayOf(3, 2, 1)

    for ((index, int) in array.withIndex()) {
        println("$index $int")
    }
}
0 3
1 2
2 1

也可以使用forEachforEachIndexed完成上述操作:

fun main() {
    val array = arrayOf(3, 2, 1)

    array.forEach {
        println(it)
    }

    println()

    array.forEachIndexed { index, int ->
        println("$index $int")
    }
}
3
2
1

0 3
1 2
2 1

可以使用Range表达式(Range Expression)生成指定范围内的数字(支持浮点数FloatDouble,除了Long,其他类型会转为Int):

  • 增序。使用..生成包含末尾值(左闭右闭)的范围;使用..<(Kotlin v1.9.22及之前用的是until,现在也能用)生成包含末尾值(左闭右开)的范围。
    fun main() {
        for (int in 0..2) println(int)
        
        println()
        
        for (int in 0..<2) println(int)
        // for (int in 0 until 2) println(int)
    }
    
    0
    1
    2
    
    0
    1
    
    
  • 倒序
    fun main() {
        for (int in 2 downTo 0) println(int)
    }
    
    2
    1
    0
    
    
  • 指定步长
    fun main() {
        for (int in 0..2 step 2) println(int)
    
        println()
    
        for (int in 2 downTo 0 step 2) println(int)
    }
    
    0
    2
    
    2
    0
    
    

while

当条件成立时,while将执行相应内容。

while(条件) ...

do ... while(条件)
fun main() {
    var count = 0

    while (count < 2) {
        println("第 $count 次")

        count++
    }
}
第 0 次
第 1 次

Note:count++是自增1,相当于count = count + 1,类似的还有count--(自减1)、++count--count。下方是count++++count的对比,在单独写出时,它们的效果没有区别。在访问其值时,count++会先给出当前值,再加1;而++count会先加1,再返回值(count----count类似)。

fun main() {
   var count = 0

   println(count++)
   println(count)
}
0
1

fun main() {
   var count = 0

   println(++count)
   println(count)
}
1
1

fun main() {
    var count = 0

    do {
        println("第 $count 次")

        count++
    } while (count < 2)
}
第 0 次
第 1 次

从结果来看,二者是相同的,但do-while会不管条件是否成立,先执行一次,以下是对比:

fun main() {
    var count = 2

    while (count < 2) {
        println("while 第 $count 次")

        count++
    }

    count = 2

    do {
        println("do-while 第 $count 次")

        count++
    } while (count < 2)
}
do-while 第 2 次

break 和 continue

在循环中(forwhile),可以使用break跳出循环,使用continue跳过一次循环:

count == 2时,执行了break跳出for循环,来到了循环外

fun main() {
    for (count in 0 .. 4) {
        if (count == 2) break
        println(count)
    }

    print("循环外")
}
0
1
循环外

count == 2时,跳过count2的那一次循环,所以打印结果中没有2

fun main() {
    for (count in 0 .. 4) {
        if (count == 2) continue
        println(count)
    }

    print("循环外")
}
0
1
3
4
循环外
  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值