條件控制

      在〈條件控制〉中尚無留言

if-else if-else

Kotlin的條件判斷式跟Java, C都是一樣的, 如下

fun main(args:Array<String>){
    print("請輸入價格 :")
    var price= Integer.parseInt(readLine())
    if (price <=50){
        print("便宜")
    }
    else if (price<=100){
        print("普通價格")
    }
    else{
        print("搶錢啊")
    }
}

字串判定

Java字串內容是否一樣, 需使用 str.equals(). 而在kotlin一樣是使用equals()來判定.
只是Kotlin比較人性化, 覆寫 “==” 運算子來判定內容

fun main(args:Array<String>){
    print("請輸入名字 : ")
    var name= readLine()
    if (name=="Thomas")print("正確")
    else print("錯誤")
}

布林值

Boolean只有true/false二個值, 使用Boolean時, 雖可寫成 if(runFlag==true),
但精簡成如下更為正確

fun main(args:Array<String>){
    var runFlag:Boolean=true
    if(runFlag){
        print("執行")
    }
    else{
        print("不執行")
    }
}

省略{}

當區塊內只有一行時, 可以省略 “{}”, 亦可將區塊內的那一行置於 if or else的後面

fun main(args:Array<String>){
    var runFlag:Boolean=true
    if(runFlag) print("執行")
    else print("不執行")
}

if-else if-else傳回值

fun main(args:Array<String>){
    print("請輸入數量 : ")
    var qty= readLine()?.toInt()?:0
    var discount=if(qty<10)0.9 else if(qty<50)0.8 else 0.7
    print("折扣為 :%.1f".format(discount))
}

底下是練習輸入薪資, 然後依薪資等級扣除的所得稅

0         <=salary<20000 : 6%
20000<=salary<40000 : 7%
40000<=salary<60000 : 8%
60000<=salary<80000 : 9%
80000以上(含) : 13%

請列出薪資, 所得稅, 實領金額

fun main(args:Array<String>){    
    print("請輸入薪資 : ")
    var salary= readLine()?.toInt()?:0
    var tax=
        if(salary<20000)0.06
        else if (salary<40000)0.07
        else if (salary<60000)0.08
        else if (salary<80000)0.09
        else 0.13
    println("薪資 : %d, 所得稅 : %.2f, 實領 : %.2f".format(salary, salary*tax, salary*(1-tax)))
}

if傳回值還蠻神奇的喔, 可以依不同狀況傳回不同的型態, 如下所示

fun main(args:Array<String>){
    var qty=99;
    var discount=
            if(qty>=100)0.8
            else "數量不足, 不打折"
    print(discount);
}

範圍值判定

如下代碼, 可以直接判定某值是否在一特定範圍內

fun main(args:Array<String>){
    print("請輸入密碼 :")
    var password= readLine()?.toInt()?:0
    if (password in 1..100) print("介於1-100之間")
    else print("輸入錯誤")
}

介於某範圍的表示法為 1..100, 中間有二個 “..”. 感覺這 kotlin 抄襲 Python 還蠻透徹的.

承上薪資所得稅之練習題, 亦可寫成如下

fun main(args:Array<String>){    
    print("請輸入薪資 : ")
    var salary= readLine()?.toInt()?:0
    var tax=
        if(salary in 0..1999)0.06
        else if (salary in 20000..39999)0.07
        else if (salary in 40000..59999)0.08
        else if (salary in 60000..79999)0.09
        else 0.13
    println("薪資 : %d, 所得稅 : %.2f, 實領 : %.2f".format(salary, salary*tax, salary*(1-tax)))
}

When

C/Java有switch, 在Kotlin則改為when

請注意, when的每一個條件, 都會自動中斷, 不會灌到下一個條件

fun main(args:Array<String>){
    print("請輸入婚姻狀況 :")
    var m= readLine()
    when(m){
        "A", "a"->{
            print("單身")
            print("而且未婚")
        }
        "B", "b" ->print("已婚")
        "C", "c" ->print("離婚")
        "D", "d" ->print("同居")
        else ->{
            print("不詳")
            print("輸入錯誤")
        }

    }
}

如果是數字的話, 可以使用 in 設定在某一範圍值

fun main(args:Array<String>){
    print("請輸入單價 :")
    var price= readLine()?.toInt()?:0
    when(price){
        in 0..100->{
            print("便宜")
            print("快來買")
        }
        in 101..150->print("普通")
        else ->print("太貴了")
    }
}

&& ||

二個條件的結合,可以使用 &&(and) 或者是 ||(or)連接, 如下所示

fun main(args:Array<String>){
    println("空姐錄取條件")
    print("請輸入身高 :")
    var height= readLine()?.toInt()?:0
    print("請輸入年齡 :")
    var age= readLine()?.toInt()?:0
    if(age<=40 && height>=160)print("錄取")
    else print("不錄取")
}

請注意, 
&& 的第一條件如果不成立, 則第二條件不執行. 
||  的第一條件若成立, 則第二條件不執行. 

fun main(args:Array<String>){
    var a=1
    var b=10
    if (a++>2 && b--<10){
        println("true")
    }
    else{
        println("false")
    }
    println("a:%d, b:%d".format(a, b))
}
結果為 :
false
a:2, b:10

終極密碼

fun main(args:Array<String>){
var password=(Math.random()*100+1).toInt()
var max=100
var min=1
while(true){
print("請輸入$min..$max 之間的數 : ")
var g= readLine()?.toInt()?:0
if (g<password)min=g
else if (g>password)max=g
else{
println("bingo")
break
}
}
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *