今晚继续攻坚Kotlin基础。
一、函数表达式
fun main(args: Array) { 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复制代码
运行结果如下:5555复制代码
二、字符串与整形之间转换
fun main(args: Array) { 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) { 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.Exceptionfun main(args: Array) { 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) { 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) { 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) { 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复制代码
六、总结
知识是一点点积累的,好记性不如烂笔头!
未完待续......