博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kotlin从入门到放弃(03day)
阅读量:7228 次
发布时间:2019-06-29

本文共 2716 字,大约阅读时间需要 9 分钟。

今晚继续攻坚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复制代码

六、总结

知识是一点点积累的,好记性不如烂笔头!

未完待续......

转载于:https://juejin.im/post/5c373f89e51d45518e1495d0

你可能感兴趣的文章
Curator的使用
查看>>
第五章 集合类型
查看>>
我的友情链接
查看>>
nagios监控服务出现FLAPPING状态时无法发出邮件报警信息
查看>>
数据库链接字符串方法
查看>>
The DCI Architecture: A New Vision of Object-Oriented Programming(一篇具有里程碑式意义的论文)...
查看>>
RIP路由配置实例V2
查看>>
Bytescout Spreadsheet SDK for.NET
查看>>
我的友情链接
查看>>
Haproxy的三种保持客户端会话保持方式
查看>>
iOS的数学函数
查看>>
python 模块 chardet下载及介绍(转)
查看>>
能力工场--关于在JavaScript中使用EL表达式的问题
查看>>
NFS服务器设置
查看>>
s:iterator 中的status 使用方法
查看>>
cocos2d-x 源码剖析系列
查看>>
IT系统架构设计
查看>>
Nginx虚拟主机配置实践(一)
查看>>
细谈Spring(一)spring简介
查看>>
网络工程师的面试题
查看>>