kotlin从小白到大神Day01 2020.7.12

内容

1.kotlin语言的特点
2.kotlin中的“基本数据类型”
3.kotlin中的判断语句
4.kotlin中的when语句
5.kotlin中的for循环
6.kotlin中的终端输入
7.作业:ATM取款机

一.kotlin语言的特点

1.空指针安全

它的空指针安全是基于问号表达式的,这或许是它最大的特点。

2.类型推断

kotlin可以自动推断相应数据的类型,所以有时定义变量可以不指明类型。

3.跨平台开发

比如可以用作安卓开发,web浏览器开发,以及原生开发。

kotlin从小白到大神Day01 2020.7.12_第1张图片
4.完全兼容Java

Kotlin能够和Java 100%互通。 注意:当kotlin调⽤Java的时候 如果有返回值 尽量使⽤可空类型去接收。

5.代码更加简洁,很多功能相比Java都有增强(后面会一一介绍)

二.kotlin中的“基本数据类型”

1.先来看kotlin中的输出语句

fun main(){

    println("我是帅哥")

    //输出变量
    val name = "rose"
    println(name)

    println("my name is $name")

    //当输出的变量的值是多层关系组成的时候,要用  ${}  这种形式
    println("my name's length is ${name.length}")

}

2.基本数据类型

在Kotlin中,一切都是对象。不存在int, double等关键字,只存在Int, Double等类。

fun main(){
    //var 定义变量
    //val 定义常量
    //java里面定义常量一般是final,定义变量不加final即可
    //而且Java里面如果长期不动这个变量,其实也可以把它当作常量   
    //1.常量定义注意事项
    //上下两种对比,下面这种是不允许的
    val pi: Double = 3.23//最好加个空格
    /*val pi1:Double
    pi1 = 1.0*/
    
    //上面是第一种定义变量的方法,还有第二种,就是不指定类型,类型可以自动推导
    val pi2 = 3.33
    //这样虽然写起来方便了,但是阅读起来不方便,所以一般来说还是加上类型比较好
    
    //2.变量之间赋值时的注意事项
    var pi3 = 3.33//这里就能自动识别出来是Double类型
    var pi4 = 1
    //pi3 = pi4,这样是不行的,可以看出kotlin是类型安全的语言,类型不一样就不能赋值
    //如果真要赋值,可以调用to方法转换一下
    pi3 = pi4.toDouble()

    //kotlin是没有基本数据类型的,有的是 把基本的数据类型都封装成了 类
    //在Kotlin中,一切皆是对象。不存在int, double等关键字,只存在Int, Double等类。
    //除了char,第一个字母都大写,这些类都继承于Number,这些数据类型之间可以互相转换
}

三.kotlin中的判断语句(特别注意?表达式)

kotlin里面的if语句可以看作一个表达式,也就是说它是可以返回值的。print(ln)除外。

//条件语句
fun main(){
    var num = 20

    //正常操作
    if(num >20){

    }else{

    }

    //kotlin里面 if-else是一个表达式,也就是说它是有结果的
    val result = if(num > 10) "下载成功" else "下载失败"//这里的结果就是String类型

    //这样的话就没有返回值
    val res = if(num > 10){
        println("$num > 10")
    }else{
        println("$num < 10")
    }

    //这样的话它的类型就可以是 {Comparable{Int & String}
    val res1 = if(num > 10){
        println("$num > 10")
        20
    }else{
        println("$num < 10")
        "失败"
    }
    //上面的代码体现了kotlin条件语句的第一个好处:简洁
    //第二个特点就是 更加方便 可以利用kotlin的类型推断,省略很多变量的定义,直接用一个变量var result来接收就可以
    //如果没有这个,那就要 一个结果定义一个变量来接收
    //比如
    val temp:Int
    val name:String
    if(1 > 0){
        temp = 20
    }else{
        name = "111"
    }
    //这里是只有两个,如果是多个,那就要定义多个变量,但是kotlin这里不用,上面代码可以改为
    var result1 = if(1 > 0) 20 else "111"

    //kotlin里面第二个判断语句
    //在c语言里面,有一个问号表达式,即 2 > 1 ? a:b
    //在kotlin里面有一个判空表达式,即 a ?: b 如果a不为空,那么结果就是a,如果a为空,那么结果就是b
    var Myname = "大帅哥"
    var result2 = Myname ?: "Myname为空"
    println(result2)//此时输出 大帅哥
    //
    var MynameSecond = null
    var result2Second = MynameSecond ?: "Myname为空"
    println(result2Second)//此时输出 Myname为空
}

四.kotlin中的when语句

这里的when语句也和if语句一样,可以当作一个表达式,可以有返回值

fun main(){
    //首先复习一下switch语句
    /*int input = 0;

    switch(input){
        case 1:
        break;
        case 2:
        break;
    }*/
    //kotlin用when语句代替了switch语句,并且增强了它的功能

    //kotlin中的when语句更简洁
    var score:Int = 10
    when(score){
        10 -> println("10")
        20 -> println("20")
        30 -> println("30")
        40 -> println("40")
        else -> println("其他")//类似于default
    }//这里输出10

    //kotlin中的when语句更灵活
    var score1:Int = 10
    when(score1){
        in 1..60 -> println("考的太差")//这里的in就理解为  属于
        in 60..79 ->println("考的不太好")
        in 80..89 ->println("考的还行")
        in 90..100->println("考的不错")
        else -> println("没来考试?")
    }//这里输出 考的太差

    //kotlin中的when语句更方便,这里when也可以作为表达式
    var score2:Int = 10
    var result = when(score2){
        10 -> 'A'
        20 -> 'B'
        30 -> 'C'
        else -> "emmm"
    }
    println(result)//这里输出A
}

五.kotlin中的for循环

这里需要注意遍历数组时的几个要点

//for循环
fun main(){

    //使用 .. 表示范围
    for(i in 1..10){
        //print("$i ")
    }//输出 1 2 3 4 5 6 7 8 9 10

    //使用until就不会包括最后面那个值
    for(i in 1 until 10){
        //print("$i ")
    }//输出1 2 3 4 5 6 7 8 9

    //使用step表示增量
    for(i in 1..10 step 2){
        //print("$i ")//输出 1 3 5 7 9
    }

    //倒序,这里也可以加上step
    for(i in 10 downTo 1){
        //print("$i ")
    }//输出10 9 8 7 6 5 4 3 2 1

    //对于数组
    val names = arrayOf("jack","rose","merry")
    //正常写法
    for(i in 0..names.size -1){
        //println(names[i])
    }
    //对于数组,有一个专门的遍历索引值的写法,即获取对应数组的索引值
    for(i in names.indices){
        //println(names[i])
    }
    //增强for写法(依次获取每一个元素)
    for(name in names){
        //println(name)
    }

    //特别的,对于数组,还可以同时取出索引值以及相对应的数值
    for((index,item) in names.withIndex()){
        println("$index - $item")
    }
    /*输出
    0 - jack
    1 - rose
    2 - merry
     */
    /*java中写法
     String[] names = new String[]{"1","2"};

    //for写法
    for (int i = 0; i < names.length - 1 ; i++) {
        System.out.print(names[i]);
    }

    //还可以使用增强for循环

     */
}

六.kotlin中的终端输入

//正常输入
val input = readLine()//这里是字符串
println(input)

//如果要输入整数的话
val scanner = Scanner(System.`in`)//注意这里的in要用单引号包裹起来
val num = scanner.nextInt()
println(num)

七.作业:ATM取款机

四个功能:1.查询余额 2.存钱 3.取钱 4.退出

疑点:不知道kotlin中的for循环如何退出,而且最后的for循环为何又走了一次

import java.util.*
//ATM取款机
var balance : Double = 10000.0
fun saveMoney(){
    println("请输入要存款的金额")
    var scanner = Scanner(System.`in`)

    val saveMoney : Double = scanner.nextDouble()

    balance = balance + saveMoney

    println("存款成功,您的余额为 $balance")

}

fun getMoney(){
    println("清输入要取走的金额")

    var scanner = Scanner(System.`in`)

    var getMoney : Double = scanner.nextDouble()

    if(getMoney <= balance) {
        balance = balance - getMoney

        println("取款成功,您的余额为 $balance")

    }else{
        println("你没有这么多钱,请重新选择操作")
    }
}

fun exit(){
    println("感谢您的使用,欢迎下次再来")
    return
}
fun main(){

    println("***********************************")
    println("1.查询余额")
    println("2.存钱")
    println("3.取钱")
    println("4.退出")
    println("***********************************")

    for(i in 1..9999999999999999){
        println("请选择操作")

        //接收操作
        var input = readLine()

        when (input) {
            "1" -> println("您的余额为 $balance")
            "2" -> saveMoney()
            "3" -> getMoney()
            "4" -> exit()
        }
    }
}

结果


1.查询余额
2.存钱
3.取钱
4.退出


请选择操作
1
您的余额为 10000.0
请选择操作
2
请输入要存款的金额
200
存款成功,您的余额为 10200.0
请选择操作
3
清输入要取走的金额
500
取款成功,您的余额为 9700.0
请选择操作
4
感谢您的使用,欢迎下次再来
请选择操作
通过查阅资料,知道了kotlin有标签机制,即
在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签。 要为一个表达式加标签,我们只要在其前加标签即可。

loop@ for (i in 1..100) {
    // ……
}

现在,我们可以用标签限制 break 或者continue:

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (……) break@loop
    }
}

标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。 continue 继续标签指定的循环的下一次迭代。
所以上面的代码可以更改为:

loop@ for(i in 1..9999999999999999){
    println("请选择操作")

    //接收操作
    var input = readLine()

    when (input) {
        "1" -> println("您的余额为 $balance")
        "2" -> saveMoney()
        "3" -> getMoney()
        "4" -> break@loop

        else -> println("您输入有误,请重新输入")

    }
}

但是还是有一个局限性,就是输入 4 的时候,我还想再输出 您选择退出,但是input的每一个值好像只允许写一行,所以只能选择了break。可能我理解有误,也可能有别的解决办法,今天我也没找到,不过没关系,后面学着学着就知道哪里有问题了。
总之今天收获不小,明天继续加油!!!

你可能感兴趣的:(kotlin学习笔记)