main() 程序入口
println() 打印
函数声明基本格式:fun 函数名(参数:参数类型){函数体}
0、Boolean运算
Math.sqrt(5.0) //sqrt()–开根号,获取5.0的开根值,即根号5的值
Math.pow(2.0,100.0) //pow()–幂函数,计算2的100次方
1、命令行交互式工具
不实用,内容省略。
2、函数加强
函数命名格式说明:
fun 函数名(参数:参数类型):返回值类型{
函数体
}
如果没有返回值,使用 :Unit 标识,也可以省略不写
返回值也是使用 return 返回。
3、函数声明练习题
内容省略
4、字符串模板
“ ” ,被两个双引号包裹的内容是普通字符串,支持转义字符
“”“ ”“” ,被一对三引号包裹的内容是原样字符串,不支持转义字符,其中的内容被定义成什么样,输出的时候就是什么样。
字符串模板格式:${占位字符串}
5、条件控制–if、else
基本格式:
if(条件){
//DO STH
}else{
//DO STH
}
详细可参考:https://www.jianshu.com/p/b8eb0fe28dad
6、字符串比较
var str1=“张三” // = 是赋值
var str2=“李四”
boolean flag=str1==str2 // == 是比较,等同于 Java中的 equals()
可以使用 == 比较字符串
也可以使用 equals(,) 方法比较字符串,该方法第二个参数表示是否忽略大小写,true–忽略大小写,false–不忽略大小写。
equals(,) 中第二个参数为 true时 效果等价于Java中的 equalsIgnoreCase()
7、空值处理
以 null 表示空值
kotlin 中定义方法时,默认接收的是 非 null 参数。
如果定义某个方法可以接收 null参数,则在声明方法参数时在参数后面加上?。示例如下:
fun test(str1:String?){ //String 后面的 ? 就表示该方法可以接收 null 作为参数
//DO STH
}
8、When表达式
类似于Java中的switch
基本使用格式:
when(变量){
分支A -> 表达式
else -> 表达式
}
带有返回值的When表达式:
var result=when(变量){
分支A -> 表达式(要有返回值,最终将值赋给result)
else -> 表达式(要有返回值,最终将值赋给result)
}
详细参考:https://www.jianshu.com/p/b8eb0fe28dad
9、Loop和Range
声明一个区间数组
var nums1=1…100 //表示我们声明了一个闭区间数组,其中包含的数值为 1-100。 … 表示闭区间
var nums2=1 util 100 //前闭后开区间,取值 1-99. util 表示前闭后开区间
for 基本循环格式
for(变量 in 数组或字符串){
//DO STH
}
带有步进的for循环
for (变量 in 数组 step 步进数量){ //所谓步进,就是递增幅度。默认步进为1
//DO STH
}
数组.reversed() //数组内容反转
数组.count() //获取数组的容量,等价于Java中的 数组.length
详细参考:https://www.jianshu.com/p/b8eb0fe28dad
0、List 和 Map
1、List
List的基本声明格式:
var list1=listOf(元素1,元素2,元素3) //声明List时主要是通过 listOf()实现
使用 for 循环同时遍历索引和索引对应的数值
for((index,value) in list.withIndex()){ //重点是 withIndex() 方法,index 接收索引,value 接收对应的值
//DO STH
}
2、Map (词典)
基本声明格式:
var map=TreeMap<键类型,值类型>()
map[key]=value
示例代码:
var map=TreeMap<String,String>() //声明 map
map[“好”]=good
map[“学习”]=study //添加键值对元素
println(map[“好”]) //取值并打印
1、函数和函数表达式
1、函数的简化
//原函数:
fun sum(a:Int , b:Int):Int{
return a+b
}
//简化后
fun sum(a:Int , b:Int):Int=a+b
2、使用 var 声明函数——函数表达式1(重点!)
kotlin 中除了使用基本的 fun 关键字声明函数外,还可以使用 var 声明。示例如下:
var i={x:Int , y:Int -> x+y} //声明函数i,接收两个Int类型参数 x、y,返回 x+y 的值
i(3,5) //调用使用 var 声明的函数 i
3、使用 var 声明函数——函数表达式2(重点!)
var j:(Int,Int)->Int={x,y -> x+y} //声明函数j,它接收的参数是两个Int, 返回一个Int,对应的表达式是 {x,y->x+y}
j(4,4) //调用函数
详细参考:https://www.jianshu.com/p/da4a93a356d6
2、默认参数和具名参数
具有默认参数值得函数声明
val Pi=3.1415926
fun getRoundArea(PI:Float=Pi , radius:Float):Float{ //为变量PI赋予了默认值 Pi,这样,调用该方法时可以不再传递PI。但,如果我们想传入的值和默认值不一致时还是需要传入的
return PIradiusradius
}
调用带有默认参数值的函数
var a=getRoundArea(3.14f,5.0f) //因为我们相传入的PI和默认值不一致,所以,需要将3.14f传入
具名参数的使用
所谓具名参数,就是调用某个方法时指明传入的参数是给哪个变量的。
var a=getRoundArea(radius=5.0f) //我们需要的PI值与默认值一致,此时不需要再传入PI值。只需要通过 radius=5.0f 声明我们传入了半径值
3、字符串和数字的转换
var a=“13”
a.toInt() //字符串转换为Int
var b=13
b.toString() //Int转换为字符串
4、人机交互–根据用户输入的数字动态计算Sum
意念交互、语音交互、眼动跟踪、体感交互、打字交互
fun main(array:ArrayList){
println(“请输入第一个数值”)
var a=readLine() //读取键盘输入的字符串内容,并赋值给a
println(“请输入第二个数值”)
var b=readLine()
var num1=a!!.toInt() //readLine()得到的可能是null,所以此处通过 !! 断言输入不为null
var num2=b!!.toInt()
println("${num1}+${num2}=${num1+num2}")
}
5、异常处理
异常处理格式:–同Java
try{
//可能会出错的代码块
}catch(e:Excepiton){
//出错之后的处理逻辑
}
6、递归
1、利用递归实现 阶乘函数
fun fact(a:Int):Int{
if(a==1){
return 1
}else{
return a*fact(a-1) //函数内调用函数本身就成为了递归
}
}
2、BigInteger
在上面的方法中,我们用 Int 来接收阶乘的值,但是如果我们输入 100 ,会发现最终返回的值是 0, 是因为 100的阶乘超过了 Int的范围。所以,此时我们就需要使用到 BigInteger。
BigInteger 用来表示一个超大值。
import java.math.BigInteger
fun main(array: Array) {
val num = BigInteger(“50”) //声明BigInteger常量时传入一个字符串类型的数值
println(fact(num))
}
fun fact(num: BigInteger): BigInteger {
return if (num == BigInteger.ONE) {
BigInteger.ONE
} else {
num * fact(num - BigInteger.ONE)
}
}