Kotlin基础 (二)
11_kotlin命令行交互式终端
配置环境变量 PATH
Kotlinc :进入命令行
:quit :退出
12_kotlin函数加强
函数的本质
函数的本质,可以理解是一个或者一组功能的组合.
kotlin函数编写规则
实战编写一个计算器:
fun main(args: Array<String>) {
var a = 8
var b = 2
println("a+b="+plus(a,b))
println("a-b="+sub(a,b))
println("a*b="+mutl(a,b))
println("a/b="+devide(a,b))
}
//fun 固定写法 plus 函数名称 (a第一个参数,类型 Int , b第二个参数,类型 Int): Int 返回值是Int类型
// 接收两个参数,方法的返回值是一个Int类型
fun plus(a:Int,b:Int):Int{
return a+b
}
fun sub(a:Int,b:Int):Int{
return a-b
}
fun mutl(a:Int,b:Int):Int{
return a*b
}
fun devide(a:Int,b:Int):Int{
return a/b
}
作业练习
fun main(args: Array<String>) {
var result = sayHello("张三")
println(result)
println(checkAge(28))
saveLog(3)
}
// 请编写函数,函数名为 sayHello
// 方法返回值是 String 类型,一个参数是 String 类型 名称为 name
fun sayHello(name:String):String{
return "Hello" + name
}
// 请编写函数,函数名为 checkAge
// 方法的返回值是 Boolean 类型,一个参数是整数类型 名称为 age
fun checkAge(age:Int):Boolean{
if (age >18)
return true
else
return false
}
// 请编写函数,函数名为 saveLog
// 方法没有返回值,一个参数是整数类型 名称为 logLevel
fun saveLog(logLevel:Int){
}
14_kotlin字符串模版
字符串模版:${} 为字符串模板(转义字符),用一个占位符
// 日记生成器,接收参数是地点,返回值是日记的内容
// ${} 为字符串模板(转义字符),用一个占位符
// ${placeName} 通过这个字符串模板 进行字符串的改变(动态的替换内容)
fun diaryGenerater(placeName:String):String{
var temple = """
今天天气晴朗,万里无云,我们去${placeName}游玩,
首先映入眼帘的是,${placeName}${placeName.length}个镏金大字。
"""
return temple
}
fun main(args: Array<String>) {
var diary = diaryGenerater("人民公园")
println(diary)
var diary1 = diaryGenerater("珠海海滨公园")
println(diary1)
}
15_kotlin条件控制if和else
// 返回两个数当中较大的那个
fun returnBig(a:Int,b:Int):Int{
if (a>b)
return a
else
return b
}
fun main(args: Array<String>) {
var a = 3
var b = 5
println("${a}和${b}较大的那个数的值为:${returnBig(a,b)}")
}
16_kotlin字符串比较
// 一个等号(=)是赋值的意思,把等号右边的内容赋值给左边的变量
// 二个等号(=)是判断两个字符串是否相等
fun main(args: Array<String>) {
var str1 = "张三"
var str2 = "张二"
println(str1 == str2)
}
上面代码打印出来为 false
把str2改为"张三"
// 一个等号(=)是赋值的意思,把等号右边的内容赋值给左边的变量
// 二个等号(=)是判断两个字符串是否相等
fun main(args: Array<String>) {
var str1 = "张三"
var str2 = "张三"
println(str1 == str2)
}
上面代码打印出来为 true
Kotlin代码和Java代码不太一样
Java代码如果用两个等号(==),它代表的是比较内存地址是否相同
Kotlin代码如果用两个等号(==),它等价于Java里面的.equals()方法
println(str1 == str2) 和 println(str1.equals(str2)) 是一样的
// 有区分大小写之分
fun main(args: Array<String>) {
var str3 = "Andy"
var str4 = "andy"
// 有区分大小写之分
println(str3 == str4)
println(str3.equals(str4))
}
上面代码输出为 false、false
因为 有 大小写区分
不区分大小写
// 一个等号(=)是赋值的意思,把等号右边的内容赋值给左边的变量
// 二个等号(=)是判断两个字符串是否相等
fun main(args: Array<String>) {
var str1 = "张三"
var str2 = "张三"
var str3 = "Andy"
var str4 = "andy"
println(str1 == str2)
println(str1.equals(str2))
// 有区分大小写之分
// Andy 和 andy
println(str3 == str4)
println(str3.equals(str4))
// 不区分大小写之分(使用重载的函数)
// Andy 和 andy
// 第二个参数为 true 代表忽略字母的大小写
// 第二个参数为 false 代表不忽略字母的大小写
println(str3.equals(str4,true))
}
17_kotlin空值处理
null 值
null也是值
表示没有东西,没有数据
如果直接传 null 值的话会直接报错!
在null值处理上kotlin比Java要智能很多,Java会出现空指针异常,Java最常见的空指针异常在kotlin语言语法阶段被完美的避免掉了,因此在heat(null)写null在kotlin语言是不可以的
如果一定要传一个 null 值应该怎么做呢?
//加上问号代表的是参数可以为空
在 fun heat(str:String?):String 中的 str:String? 中加上一个问号
//接收一个参数,参数是非空的 string 类型,加上问号代表的是参数可以为空
// 在设计函数的时候如果 (str:String)中没有问号就代表这个数据不可能为空的
fun heat(str:String):String{
return "热"+str
}
fun main(args: Array<String>) {
var result1 = heat("水")
println(result1)
// 当 (str:String?) 时可以传递 null 参数
// null 为传递过去的参数
//var result2 = heat(null)
//println(result2)
}
18_kotlin的when表达式
when
• 给定条件
• 满足什么条件执行什么任务
Kotlin代码的when表达式和Java代码的switch表达式有相识点,但是比 switch 更加强大、更加方便
// 10分:满分 9分:干的不错 8分:还可以 7分:还需努力 6分:刚好及格 其它(需要加油啦)
fun gradeStudent(score:Int){
when(score){
10 -> println("考了满分,棒棒哒!")
9 -> println("干的不错")
8 -> println("还可以")
7 -> println("还需努力")
6 -> println("刚好及格")
else -> println("需要加油哦!")
}
}
fun main(args: Array<String>) {
gradeStudent(10)
}
把数字变成中文数字(例如:1变成“一”)
数字版的代码(${placeName.length} 由这个代码所决定)
// 日记生成器,接收参数是地点,返回值是日记的内容
// ${} 为字符串模板(转义字符),用一个占位符
// ${placeName} 通过这个字符串模板 进行字符串的改变(动态的替换内容)
fun diaryGenerater(placeName:String):String{
var temple = """
今天天气晴朗,万里无云,我们去${placeName}游玩,
首先映入眼帘的是,${placeName}${placeName.length}个镏金大字。
"""
return temple
}
fun main(args: Array<String>) {
var diary = diaryGenerater("人民公园")
println(diary)
var diary1 = diaryGenerater("珠海海滨公园")
println(diary1)
}
中文数字的代码(${numToChinese(placeName.length)} 由这个代码所决定)
fun diaryGenerator(placeName:String){
var diary = """
今天天气晴朗,万里无云,我们去${placeName}游玩,
首先映入眼帘的是,${placeName}${numToChinese(placeName.length)}个镏金大字。
"""
println(diary)
}
fun numToChinese(num:Int):String{
var result = when(num){
1 -> "一"
2 -> "二"
3 -> "三"
4 -> "四"
5 -> "五"
else -> num.toString()
}
return result
}
fun main(args: Array<String>) {
diaryGenerator("珠海海滨公园")
}
19_kotlin的loop和Range
Loop:循环
Range:区间 (var nums = 1…100 (从 1 到 100 这个区间))
// 1 到 100 的数字在 kotlin 用下方表达
var nums = 1 … 100
打印 1 到 100 的值
// 计算从 1 加到 100
fun main(args: Array<String>) {
// 1 到 100 的数字在 kotlin 用下方表达
// 声明了一个数组,内容为 1 到 100
var nums = 1 .. 100
// 打印 1 到 100 的值
for(num in nums){
print("${num},")
}
}
计算从 1 加到 100
// 计算从 1 加到 100
fun main(args: Array<String>) {
// 1 到 100 的数字在 kotlin 用下方表达
// 声明了一个数组,内容为 1 到 100 的区间
var nums = 1..100
var result = 0
// 把 nums数组 里的每一个值取出来
for (num in nums) {
result = result + num
}
println("结果:${result}")
}
开区间1 到 99
//开区间
fun main(args: Array<String>) {
//前闭后开区间 [1,100) 1 到 99
var nums = 1 until 100
for (num in nums){
println(num)
}
}
step 2 以 2 作为 步长 例如:1 3 5 7
fun main(args: Array<String>) {
var nums2 = 1 .. 16
//step 2 以 2 作为 步长 例如:1 3 5 7
for (a in nums2 step 2){
println(a)
}
}
反转数值
// 反转数值
var nums3 = nums2.reversed()
for (a in nums3) {
print("数值为:" + a + " ")
}
集合里面有多少内容
// 集合里面有多少内容
println("总数为:" + nums3.count())
总体的代码
//开区间
fun main(args: Array<String>) {
// 前闭后开区间 [1,100) 1 到 99
var nums = 1 until 100
for (num in nums) {
print("${num} ,")
}
println()
println()
var nums2 = 1..16
//step 2 以 2 作为 步长 例如:1 3 5 7
for (a in nums2 step 2) {
print("数值为:" + a + " ")
}
println()
println()
// 反转数值
var nums3 = nums2.reversed()
for (a in nums3) {
print("数值为:" + a + " ")
}
println()
println()
// 集合里面有多少内容
println("总数为:" + nums3.count())
}
20_kotlin的list和map入门
List
List就是列表的意思
Map
Map类似一个词典
词典有索引
索引对应了具体的内容
List的Demo
** lists.withIndex() 有下标的方式打印 List**
fun main(args: Array<String>) {
// 定义一个List
var lists = listOf("买蛋糕","买奶茶","买水果","买冰淇淋")
// lists.withIndex():按位置去打印 List 里的内容
// lists.withIndex() 有下标的方式打印 List
// 例如:0 买蛋糕
for ((i,e) in lists.withIndex()){
println("$i $e")
}
}
Map的Demo
import java.util.*
fun main(args: Array<String>) {
// 声明一个 Map
var map = TreeMap<String, String>()
// 向 Map 里放置东西
map["好"] = "good"
map["学习"] = "study"
map["天"] = "day"
map["向上"] = "up"
// 如何获取 Map 里面的内容(与赋值是一样的)
println(map["好"])
}