1、if语句
/**
* 1、普通使用
*/
fun max(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
/**
* 2、简化版
* (1)如果if里面只有一条语句则可以省略{}和return
* (2)kotlin是表达式语法,所以if语句带返回值
*/
fun max2(a: Int, b: Int): Int {
return if (a > b) a else b
}
fun main() {
println(max(10, 20))
println(max2(6, 2))
}
2、for循环
fun main() {
/**-------------------- for循环 --------------------*/
val str = "abcdef"
for (c: Char in str) {
print("$c ")
}
println()
//a b c d e f
for ((index, c) in str.withIndex()) {
print("($index, $c) ")
}
println()
//(0, a) (1, b) (2, c) (3, d) (4, e) (5, f)
/**-------------------- forEach循环 --------------------*/
str.forEach {
print("$it ")
}
println()
//a b c d e f
str.forEachIndexed { index, c ->
print("($index, $c) ")
}
println()
//(0, a) (1, b) (2, c) (3, d) (4, e) (5, f)
//此处为函数参数,类似于c语言里的函数指针,后面会讲到,这里知道就行了
str.forEachIndexed(::action)
}
fun action(index: Int, c: Char) {
print("($index, $c) ")
}
3、continue和break
fun main() {
val str = "abcde"
/**-------------------- continue --------------------*/
for (c in str) {
if (c == 'c') {
continue
}
print("$c ")
}
println()
//跳过此次循环,继续执行下次循环,输出结果:a b d e
/**-------------------- break --------------------*/
for (c in str) {
if (c == 'c') {
break
}
print("$c ")
}
println()
//跳出本层循环,不再执行,输出结果:a b
/**-------------------- 高级循环 --------------------*/
str.forEach {
if (it == 'c') {
//continue 不能用于高级循环
//break 不能用于高级循环
return //结束方法,即返回到main,结束main方法
}
}
}
4、标签
fun main() {
val str1 = "abc"
val str2 = "123"
/**-------------------- 1、多重循环 --------------------*/
for (c1 in str1) {
for (c2 in str2) {
print("($c1, $c2) ")
}
}
println()
//(a, 1) (a, 2) (a, 3) (b, 1) (b, 2) (b, 3) (c, 1) (c, 2) (c, 3)
/**-------------------- 2、标签处返回 --------------------*/
tag@ for (c1 in str1) {
for (c2 in str2) {
print("($c1, $c2) ")
if (c1 == 'b' && c2 == '2') {
break@tag
//return 结束方法,如果后面还有逻辑就执行不到了
}
}
}
println("main结束")
//(a, 1) (a, 2) (a, 3) (b, 1) (b, 2) main结束
}
5、while和do while
fun main() {
/**-------------------- while循环 --------------------*/
//输出0到10
var index = 0
while (index <= 10) {
print("$index ")
index++
}
println()
//0 1 2 3 4 5 6 7 8 9 10
/**-------------------- do while循环 --------------------*/
var a = 11
do {
print("$a ")
a--
} while (a <= 10 && a >= 0)
println()
//11 10 9 8 7 6 5 4 3 2 1 0
//可以发现11没有在0-10的范围内还是输出了,这是因为do-while循环会先执行一次然后才执行判断
var b = 11
do {
print("$b ")
b--
} while (b in 0..10)
println()
//区间的运用
//11 10 9 8 7 6 5 4 3 2 1 0
}
6、when表达式
fun main() {
/**-------------------- 1.基本用法 --------------------*/
var age = 6
when (age) {
1 -> {
println("没上学")
}
2 -> {
println("没上学")
}
6 -> {
println("上小学")
}
12 -> {
println("上中学")
}
15 -> {
println("上高中")
}
//如果只有一条语句可以省略{}
else -> println("成年了")
}
//结果:上小学
/**-------------------- 2.条件合并 --------------------*/
age = 4
when (age) {
//相同的处理可以合并
1, 2, 3, 4, 5 -> println("没上学")
6 -> println("上小学")
12 -> println("上中学")
15 -> println("上高中")
else -> println("成年了")
}
//结果:没上学
/**-------------------- 3.结合区间使用 --------------------*/
age = 16
when (age) {
//in+区间:表示在某个区间内
in 1..5 -> println("没上学")
in 6..11 -> println("上小学")
in 12..14 -> println("上中学")
in 15..17 -> println("上高中")
else -> println("成年了")
}
//结果:上高中
/**-------------------- 4.用来判断类型 --------------------*/
val str: Any = "kotlin"
//val b = str is String
when (str) {
//is:类型判断关键字
is Int -> println("Int类型")
is String -> println("String类型")
else -> println("I未知类型")
}
//结果:String类型
/**-------------------- 5.不带参数 --------------------*/
age = 22
when {
age < 6 -> println("没有上学")
age in 6..17 -> println("正在上学")
else -> println("一看就是社会人儿")
}
//结果:一看就是社会人儿
/**-------------------- 6.when表达式返回值 --------------------*/
val kot: Any = "kotlin"
val result = when (kot) {
is Int -> "Int类型"
is String -> {
var add = 1 + 2
add++
"String类型"
}
else -> "未知类型"
}
println(result)
//结果:String类型
//说明:when表达式的返回值为满足条件的分支的最后一行结果
}