11、循环和范围
var a = 0 .. 100 // 代表一个数组,从0到100
var b = 0 until 100 // 代表一个数组,从0到99
var c = a.reversed() // 表示从100到0
var d = a.count() // 表示a数组的个数
// 从0循环到100,并依次取出赋值给i
for(i in 0 .. 100){
}
// 从0循环到100,并依次取出赋值给i,步长为2,即0、2、4、6...
for(i in 0 .. 100 step 2){
}
12、List
var list = listOf("111", "222", "333")
// 遍历
for(item in list){
}
// 带角标的遍历,i是角标,e是元素内容
for((i,e) in list.withIndex()){
}
13、Map
var map = TreeMap<String,String>() // 引入Java的Map包
map["111"] = "good"
map["222"] = "yes"
map["333"] = "no"
14、函数和函数式表达式
// 写法一:
fun demo(a:Int, b:Int):Int{
return a+b
}
// 写法二:
fun demo(a:Int, b:Int):Int = a+b
// 写法三:
var demo = {a:Int, b:Int -> a+b}
使用var result = demo(1, 2)
// 写法四:
var demo:(Int, Int) -> Int = {a,b -> a+b}
使用var result = demo(1, 2)
15、默认参数和具名参数
fun demo(a:Int, b:Int = 10){ // b是默认参数
}
使用demo(a = 1) // 不传b的值也可以,此时a是具名参数
demo(3, 5) // 这样使用也没问题,5会覆盖掉10
16、字符串和数字转换
var a = 1
var b = "2"
b = a.toString()
a = b.toInt()
17、读取控制台输入(readLine()方法)
var str = readLine() // 控制台输入的都是字符串
var num = str?.toInt() // 不为空时才可以转Int,为空则不调用toInt()方法而是返回空
var num = str!!.toInt() // 告诉编译器,str肯定不为空,你就别操心了
18、异常处理
try{
...
} catch(e : Exception){
...
}
19、递归
// n的阶乘
fun jiecheng(num:Int) : Int{
if(num == 1){
return 1
} else {
return num * jiecheng(num - 1)
}
}
// 大数字的阶乘
fun jiecheng(num:BigInteger) : BigInteger{
if(num == BigInteger.ONE){
return BigInteger.ONE
} else {
return num * jiecheng(num - BigInteger.ONE)
}
}
20、尾递归优化(关键字tailrec)
// n的累加计算
fun leijia(num:Int) : Int{
if(num == 1){
return 1
} else {
return num + leijia(num - 1)
}
}
// n的累加计算(尾递归优化)
tailrec fun leijia(num:Int, result:Int) : Int{
if(num == 1){
return result + num
} else {
return leijia(num - 1, result + num)
}
}
使用:
var result = 0
result = leijia(100, result)