iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
1

本篇文章大概會討論到下列幾個三種迴圈用法,並跟 Java 做比較,讓讀者更明瞭

  • for 循環

  • while 循環

  • do while 循環

  • i++ / ++i

for 循環

需要設立 一個 變數 代表循環中的值 , 例如下面的 i , "in" keyword 代表 變數 在這個循環的範圍

..:用於遞增

i in 1..3 , 代表 i 在 for 循環依序(每次循環會是 上一次加一)會是 1 到 3


fun main() {
    for (i in 1..3) {
        println(i)
    }
 
}

// result:
// 1
// 2
// 3

在java 中會這樣表示

i 的起點會從 0 開始循環 , i<=3 也就是說 i 最大只會是3 , i = i+1 相當於調控 step , 如果是 i = i + 2 一次跨兩步


void main() {
    for (i int i=0; i<=3; i=i+1) {
        println(i)
    }
 
}
 

downTo:用於遞減

i in 6 downTo 0 , 代表 i 在 for 循環倒序(每次循環會是 上一次減一)會是 6 到 0


fun main() {
 
    for (i in 6 downTo 0  ) {
        println(i)
    }
}

// result :

// 6
// 5
// 4
// 3
// 2
// 1
// 0

在java 中會這樣表示

i 的起點會從 6 開始循環 , i>=0 也就是說 i 最小只會是0 , i=i-1 也就是一次遞減一


void main() {

    for (i int i=6; i>=0; i=i-1) {
        println(i)
    }
 
}
 

until :用於遞增



fun main() {
 
    for (i in 0 until 10   ) {
        println(i)
    }
}

在java 中會這樣表示

i 的起點會從 0 開始循環 , i< 10 也就是說 i 最大只會是9 ,不能超過 10 , i=i+1 也就是一次加一
仔細比較這個 until java 中的表示方法 , 和 .. java 中的表示方法 , 明白差別 1 until 10 最大值會 < 10 而
而 1.. 10 最大值會 <= 10


void main() {

    for (i int i= 0; i< 10; i=i+1) {
        println(i)
    }
 
}
 

step:搭配以上語法,可以改變遞增減的量。

step 後面的數字 如果搭配倒序(down to) , 會是遞減的數值 ; 後面的數字 如果搭配順序(until / ..) , 會是遞增的數值

  1. 搭配 ..


fun main() {
 
    for (i in  0 ..6 step  2) {
        println(i)
    }
}
  
 

在java 中會這樣表示


void main() {

    for (i int i= 0; i<= 6; i=i+2) {
        println(i)
    }
 
}
 
  1. 搭配 until
fun main() {
 
    for (i in  0 until 6 step  2) {
        println(i)
    }
}
  

在java 中會這樣表示


void main() {

    for (i int i= 0; i<6; i=i+2) {
        println(i)
    }
 
}
 
  1. 搭配 downTo
fun main() {
 
    for (i in  6 downTo 0 step  2) {
        println(i)
    }
}

在java 中會這樣表示


void main() {

    for (i int i= 6; i>= 0; i=i-2) {
        println(i)
    }
 
}
 

while 循環

while 循環 簡單說一句話, 如果條件達成 會執行到系統掛掉為止, 也就是說他會一直會無止盡跑下去
這點很重要, 之前我就有錯用過 , 讓手機 App 執行到這裡就當機 XDD,所以請小心使用

所以訂定條件時要注意會不會一直循環下去

i = i + 1 每執行一次循環 i 的值 會執行 +1 , 直到 i > 5 條件不符合就會停止迴圈


// Program to print line 5 times

fun main(args: Array<String>) {

    var i = 1

    while (i <= 5) {
        println("Line $i")
         i = i + 1
    }
    
 // result:
// Line 1
// Line 2
// Line 3
// Line 4
// Line 5
}

如果 沒有 i = i + 1 , i 永遠都 <= 5 , 循環就會無止盡跑下去


// Program to print line 5 times

fun main(args: Array<String>) {

    var i = 1

    while (i <= 5) {
        println("Line $i")
     
 
     
    }
}

do while 循環

do while 循環 和 while 的差別在於, while 是先檢查條件是否成立,成立才執行下面的指令,而 do-while 是先執行那些指令,再去檢查條件是否成立。

下面範例 while 會判斷i 是不是 <= 5 如果條件達成 才會 println("Line $i") , 進行{} 內的程式碼
所以 不會 打印出 任何內容


// Program to print line 5 times

fun main(args: Array<String>) {

    var i = 6

    while (i <= 5) {
    
        println("Line $i")
         
          i = i + 1 
    }
}

下面範例 do while 會執行 println("Line $i") 再去檢查 i 是不是 <= 5
所以 至少 會打印出 Line 6


// Program to print line 5 times

fun main(args: Array<String>) {

    var i = 6


    do{    
        println("Line $i")
         i = i + 1 
    }
    
    while  (i <= 5)

}

// result:
// Line 6

i++ / ++i

不論是 i++ 或是 ++i 都是 i = i+1 的簡化版

但兩個還是有差別 , 如下面所示

兩者A與B的輸出均是3
但只要我們是以表示式來使用,效果就不一樣了。


fun  main(){

var A=2;
var B=2;
A++; 
++B; 
println("A=$A  B= $B ");
 
}

// result:
// A=3  B= 3

A++:意思是先把A放到C,再執行A=A+1 的動作。
因為A先放到C,所以C的值會是2

++B:意思是先再執行B=B+1,再把B放到D。
因為B會先執行B=B+1的動作,所以D的值會是3


fun  main(){
var A=2;
var B=2;

val C = A++
val D = ++B

println("C=$C  D= $D ");
 
}

// result:
//C=2  D= 3 

上一篇
[Day 5 ] Kotlin class(類別) 與 繼承
下一篇
[Day 7] Kotlin Collection - Map
系列文
Android 菜鳥村-開發基礎 30篇32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言