今晚继续攻坚Kotlin基础。
一、函数表达式
fun main(args: Array<String>) {
var result1 = add1(2, 3)
println(result1)
var result2 = add2(2, 3)
println(result2)
//直接变量声明函数
var i = {x:Int, y:Int -> x + y}
println(i(2, 3))
//直接变量声明函数
var j:(Int, Int) -> Int = {x,y -> x + y}
println(j(2, 3))
}
//普通的写法
fun add1(x:Int, y:Int) :Int {
return x + y
}
//当函数体只有一行时,{}可以省略
fun add2(x:Int, y:Int) :Int = x + y
运行结果如下:
5
5
5
5
二、字符串与整形之间转换
fun main(args: Array<String>) {
var a = "8"
var b = 8
a = b.toString()
b = a.toInt()
var c = "a2"
//报错
b = c.toInt()
}
运行结果如下:
Exception in thread "main" java.lang.NumberFormatException: For input string: "a2"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at KotlinStringTestKt.main(KotlinStringTest.kt:11)
意思是"a2"不能转化为整形
三、控制台输入
如下示例演示了一个简易的加法的计算器:
fun main(args: Array<String>) {
while (true) {
println("请输入第一个整数:")
var num1 = readLine()
println("请输入第二个整数:")
var num2 = readLine()
//!!表示该数不为空
var a:Int = num1!!.toInt()
var b:Int = num2!!.toInt()
println("$a + $b = ${a + b}")
}
}
执行结果如下:

四、异常处理
上面控制台输入的例子中,当用户输入一个字符串时,字符串在执行加法时就会抛出异常,这时我们怎么去捕获异常呢? 其实和java是一样的,都是try catch
import java.lang.Exception
fun main(args: Array<String>) {
while (true) {
println("请输入第一个整数:")
var num1 = readLine()
println("请输入第二个整数:")
var num2 = readLine()
try {
//!!表示该数不为空
var a:Int = num1!!.toInt()
var b:Int = num2!!.toInt()
println("$a + $b = ${a + b}")
}catch (e :Exception) {
println("输入有误!")
}
}
}
运行结果如下:

五、递归
1. 递归
计算7的阶乘:
fun main(args: Array<String>) {
var a = 7
println(" $a 的阶乘是:${fact(a)}")
}
fun fact(num:Int) :Int {
return if (num == 1) 1
else num * fact(num - 1)
}
运行结果如下:

2. 尾递归优化
计算累加的小例子:
fun main(args: Array<String>) {
var result = 0
println(add(10, result))
}
fun add(num: Int, result: Int): Int {
return if (num == 1) result + 1
else add(num - 1, result + num)
}
输入的10,运行结果是55,没问题
输入的100,运行的结果是5050,没问题
当输入很大的数时,比如100000.....
报错了,报错如下:

明显溢出了,该怎样优化呢?
修改代码如下:
fun main(args: Array<String>) {
var result = 0
println(add(100000, result))
}
//加上tailrec字段,让计算机一直执行完成
tailrec fun add(num: Int, result: Int): Int {
return if (num == 1) result + 1
else add(num - 1, result + num)
}
结果如下:
705082704
六、总结
知识是一点点积累的,好记性不如烂笔头!
未完待续......