Kotlin基礎語法(下)

Kotlin基礎語法(上)

Kotlin基礎語法(下)

Kotlin字符串和數字之間的轉換

var a = "13"
var b = 13

a = b.toString()
b = a.toInt()

Kotlin人機交互

fun main(args:Array<String>){
    println("請輸入第一個數字:")
    var numlstr = readLine()
    println("請輸入第二個數字:")
    var num2str = readLine()
    
    var num1 = num1str!!.toInt()
    var num2 = num2str!!.toInt()    //!!代表輸入的數據絕對不爲空
    
    println("$(num1)+$(num2)=$(num1+num2)")
}

Kotlin異常處理

fun main(args:Array<String>){
    println("請輸入第一個數字:")
    var numlstr = readLine()
    println("請輸入第二個數字:")
    var num2str = readLine()
    
    try{
        var num1 = num1str!!.toInt()
        var num2 = num2str!!.toInt()    //!!代表輸入的數據絕對不爲空
    }catch(e:Exception){
        println("運行錯誤!")
    }

    println("$(num1)+$(num2)=$(num1+num2)")
}

Kotlin遞歸

  • 計算階乘
 fun main(args:Array<String>){
     var num = 5
     //計算5的階乘
     println("5的階乘是&(fact(num))")
     //計算100的階乘
     var num1 = BigInteger("100")
     println("100的階乘是&{BigFact(num1)}")
 }
 
 fun fact(num:Int):Int{
     if(num == 1){
         return 1
     }
     else{
         return num*fact(num-1)
     }
 }
 
  fun BigFact(num:BigInteger):BigInteger{
     if(num == BigInteger.ONE){
         return BigInteger.ONE
     }
     else{
         return num*fact(num-BigInteger.ONE)
     }
 }

Kotlin尾遞歸優化

fun main(args:Array<String>){
    var result = 0
    println(ollAdd(100000))
}

tailrec fun ollAdd(num:Int, result:Int):Int{
    if(num==0){
        return 1
    }else{
        return num+ollAdd(num-1,result+num)
    }
}

Kotlin面向對象

  • 表示一個矩形類和一個妹子類
class Rect(var height:Int,var width:Int)
class Girl(var charctor:String, var voice:String)

fun main(args:Array<String>){
    var rect1 = Rect(20,10)
    println("高度:${rect1.height}")
    println("寬度:${rect1.width}") 
    
    var girl1 = Girl("彪悍","甜美")
    println("girl1這位妹子的聲音:${girl1.voice}")
}

/*
輸出:
高度:20
寬度:10
girl1這位妹子的聲音:甜美
*/

面向對象靜態屬性和動態行爲

class Girl(var charctor:String, var voice:String){
    fun smaile(){
        println("妹子笑了一下,麼麼噠!")
    }
    fun cry(){
        println("嗚嗚嗚,人家傷心了!")
    }
}

fun main(args:Array<String>){
    var girl1 = Girl("彪悍","甜美")
    println("girl1這位妹子的聲音:${girl1.voice}")
    girl1.cry()
    girl1.smaile()
}

面向對象實戰——洗衣服

/**
* 生產方創建的洗衣機
**/
class WashMachine(var module:String,var size:Int){
    var isDoorOpen = true
    var currentmode = 0
    
    fun openDoor(){
        println("洗衣機已經開門!!!")
        isDoorOpen = true
    }
    
    fun closeDoor(){
        println("洗衣機門已關閉")
        isDoorOpen = false
    }
    
    fun selectMode(){
        currentmode = readLine()
        when(mode){
            0 -> println("初始模式,請您選擇模式")
            1 -> println("輕柔")
            2 -> println("狂柔")
            else -> println("Error")
        }
    }

    
    fun start(){
        if(isDoorOpen){
            println("門還沒關,無法運行")
        }
        else{
            when(currentmode){
                0 -> {println("未選擇模式,不能開始洗衣服")}
                1 -> {
                    println("放水")
                    println("開始輕柔模式洗衣服")
                    println("洗完了")
                }
                2 -> {
                    println("放水")
                    println("開始狂柔模式洗衣服")
                    println("洗完了")
                }
                else -> {println("未選擇模式,不能開始洗衣服")}
            }
        }
    }
    
}
/**
* 用戶使用洗衣機
**/
fun main(args:Array<String>){
    var washMachine = washMachine("小天鵝",size:12)
    
    washMachine.openDoor()
    println("請選擇模式:1,輕柔。2,狂柔")
    washMachine.selectMode
    washMachine.closeDoor()
    washMachine.start()
}

Kotlin面向對象——封裝

  • 封裝就是隱藏內部實現的細節
/**
* 生產方創建的洗衣機
**/
class WashMachine(var module:String,var size:Int){
    var isDoorOpen = true
    var currentmode = 0
    
    fun openDoor(){
        println("洗衣機已經開門!!!")
        isDoorOpen = true
    }
    
    fun closeDoor(){
        println("洗衣機門已關閉")
        isDoorOpen = false
    }
    
    fun selectMode(){
        currentmode = readLine()
        when(mode){
            0 -> println("初始模式,請您選擇模式")
            1 -> println("輕柔")
            2 -> println("狂柔")
            else -> println("Error")
        }
    }

    private fun setMotorSpeed(speed:Int){        //將方法私有化,只有內部函數可調用,外部並不能看到具體的實現細節,這就是封裝
        println("發動機當前轉速 ${speed}轉/秒")
    }
    
    fun start(){
        if(isDoorOpen){
            println("門還沒關,無法運行")
        }
        else{
            when(currentmode){
                0 -> {println("未選擇模式,不能開始洗衣服")}
                1 -> {
                    println("放水")
                    println("開始輕柔模式洗衣服")
                    setMotorSpeed(100)
                    println("洗完了")
                }
                2 -> {
                    println("放水")
                    println("開始狂柔模式洗衣服")
                    setMotorSpeed(1000)
                    println("洗完了")
                }
                else -> {println("未選擇模式,不能開始洗衣服")}
            }
        }
    }
    
}
/**
* 用戶使用洗衣機
**/
fun main(args:Array<String>){
    var washMachine = washMachine("小天鵝",size:12)
    
    washMachine.openDoor()
    println("請選擇模式:1,輕柔。2,狂柔")
    washMachine.selectMode
    washMachine.closeDoor()
    washMachine.start()
}

kotlin面向對象——繼承

  • 繼承是指一個對象直接使用另一對象的屬性和方法
/*
父類
*/
open class Fathor{  //只有類open之後才能被繼承
    var chactor:String = "性格內向"
    open fun action(){      //只有方法open之後,子類才能重寫該方法
        println("公共場合大聲喧譁")
    }
    
    fun money(){
        println("很有錢")
    }
}

/*
子類
*/
class Son:Fathor(){
    override fun action(){
        println("兒子很乖,在公共場合很有禮貌")
    }
}

fun main(args:Array<String>){
    var son1 = Son()
    println("兒子的性格${son1.chactor}")
    son1.action()
    son1.money()
}
/*
輸出:
兒子的性格內向
兒子很乖,在公共場合很有禮貌
很有錢
*/

kotlin面向對象——抽象類

abstract class Human(var name:String){ //抽象人類
    abstract fun eat()
}

class Man(name:String):Human(name){
    override fun eat(){
        println("${name}哇哇哇地大口喫")
    }
}

class Woman(name:String):Human(name){
    override fun eat(){
        println("${name}嗚嗚嗚地小口喫")
    }
}

fun main(args:Array<String>){
    var person1 = Man("金三胖")
    person1.eat()
    
    var person2 = Woman("慈禧太后")
    person2.eat()
}

kotlin面向對象——多態

  • 多態就是同種功能,不同的表現形態
abstract class Human(var name:String){ //抽象人類
    abstract fun eat()  //喫
    abstract fun pee() //撒尿
}

class Man(name:String):Human(name){
    override fun eat(){
        println("${name}哇哇哇地大口喫")
    }
    
    override fun pee(){
        println("${name}站着撒尿")
    }
}

class Woman(name:String):Human(name){
    override fun eat(){
        println("${name}嗚嗚嗚地小口喫")
    }
    
        override fun pee(){
        println("${name}蹲着撒尿")
    }
}

fun main(args:Array<String>){
    var person1 = Man("金三胖")
    var person2 = Woman("慈禧太后")
    var person3 = Man("李華")
    var person4 = Woman("蒙娜麗莎")

    var houseList = listOf<Human>(person1,person2,person3,person4)
    for(person in houseList){
        h.eat()
    }
    for(person in houseList){
        h.pee()
    }
}

kotlin面向對象——接口

  • 接口泛指實體把自己提供給外界的一種抽象化物(可以爲另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不應向外界其他實體與其交互的方式。
  • 接口和抽象類的區別

接口是事物的能力,而抽象類是事物的本質

interface IMan{
    fun xiaodidi()
}

abstract class Human{
    abstract fun eat()
}

class Man:Human(),IMan{
    override fun xiaodidi(){
        println("18釐米")
    }
    
    override fun eat(){
        println("大口喫飯")
    }
}

class TaiJian:Human(){
    override fun eat(){
        println("喫皇上賞的")
    }
}

fun main(args:Array<String>){
    var man1 = Man()
    man1.xiaodidi()
    man1.eat()
    
    var man2 = TaiJian()
    man2.eat()
    
    var house = listOf<Human>(man1,man2)
    for(person in house){
        if(person is Man){   //判斷是否是Man
            person.eat()
        }
    }
}

kotlin面向對象——委託和代理

  • 委託是把事情託付給別人或別的機構辦理
  • 代理是指以他人的名義,在授權範圍內進行對被代理人直接發生法律效力的法律行爲。代理的產生,可以是受他人委託。
interface IWashBow1{    //洗碗的接口
    fun washing()
}

class BigHeadSon:IWashBowl{ //大頭兒子
    override fun washing(){
        println("我是大頭兒子,我在洗碗,一次賺1塊")
    }
}

class SmallHeadFather:IwashBowl by BigHeadSon(){//小頭爸爸,委託給大頭兒子去洗碗
    override fun washing(){
       println("我是小頭爸爸")
       BigHeadSon().washing()
       println("我看着兒子把碗洗完了")
    }
}

fun main(args:Array<String>){
    var son = BigHeadSon()
    son.washing()
    
    var father = SmallHeadFather()
    father.washing()
}

kotlin面向對象——單例模式

object BigHeadSon:IWashBowl{  //當一個類被定義爲object,那麼他在內存中就直接被創建,且有且僅有一個
    override fun washing(){
        println("我是大頭兒子,我在洗碗,一次賺1塊")
    }
}

class SmallHeadFather:IwashBowl by BigHeadSon{//再委託的話,需要把括號去掉。
    override fun washing(){
       println("我是小頭爸爸")
       BigHeadSon.washing()     //如果帶着括號,相當於創建了兩個大頭兒子
       println("我看着兒子把碗洗完了")
    }
}

kotlin面向對象——枚舉

enum class Week{
    星期一,星期二,星期三,星期四,星期五,星期六,星期日
}

fun main(args:Array<String>){
    println(Week.星期一.ordinal)    //打印星期一所在位序
}

kotlin面向對象——印章類(Sealed class)

  • 子類類型有限的class
sealed class Son{  //小母驢,小公驢,小公馬生下來的兒子
    fun sayHello(){
        println("Hello")
    }
    class 小小驢():Son()
    class 小騾子():Son()
}

fun main(args:array<String>){
    var s1:Son = Son.小騾子()   //無法直接實例化Son,只能實例化其中的類
    var s2:Son = Son.小小驢()
    var s3:Son = Son.小騾子()
    
    var list = listOf<Son>(s1,s2,s3)
    for(v in list){
        if(v is Son.小騾子){
            v.sayHello()
        }
    }
    
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章