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
}
}
}