Lập trình Kotlin - Vòng lặp For

Vòng lặp For trong Kotlin

Với mọi ngôn ngữ lập trình thì các cấu trúc vòng lặp rất là quan trọng, đặc biệt là vòng for rất là phổ biến và hầu như trong mọi phần mềm đều chắc chắn sử dụng để giải quyết những công việc lặp đi lặp lại một cách có quy luật.

1. Loại for thứ 1 – Duyệt tuần tự hết giá trị trong danh sách (closed range)

for (i in a..b) { Xử lý biến i }

Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động tăng dần từ a cho tới b. Ta có thể thay tên biến i thành tên biến bất kỳ

Ví dụ 1: Viết chương trình tính giai thừa của một số nguyên dương n:

fun main(args: Array<String>) {
    var gt:Int=1
    val n:Int=5
    for (i in 1..n)
    {
        gt *= i
    }
    println("$n!=$gt")
}

Ở đoạn lệnh trên, i sẽ chạy tuần tự từ 1 tới n (với n=5). Mỗi lần chạy nó sẽ nhân dồn i cho biến gt. Kết thúc vòng lặp ta sẽ được giai thừa của n.

2. Loại for thứ 2 – Duyệt tuần tự gần hết giá trị trong danh sách (half-open range)

for (i in a until b) { Xử lý biến i }

Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động tăng dần từ a cho tới gần b. Ta có thể thay tên biến i thành tên biến bất kỳ

Ví dụ 2: Viết chương trình tính tổng từ 1 tới gần số nguyên dương n:

fun main(args: Array<String>) {
    var sum:Int=0
    val n:Int=5
    for (i in 1 until n)
    {
        sum += i
    }
    println("Tổng=$sum")
}

Được thực hiện, với kết quả: Tổng=10

3. Loại for thứ 3 – Điều hướng bước nhảy step

for (i in a .. b step x) { Xử lý biến i }

Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động tăng dần từ a cho tới b, nhưng mỗi lần duyệt nó tăng theo x đơn vị. Ta có thể thay tên biến i thành tên biến bất kỳ

Ví dụ 3: Viết chương trình tính tổng các số chẵn nhỏ hơn hoặc bằng số nguyên dương n:

fun main(args: Array<String>) {
    var sum:Int=0
    var n:Int=10
    for (i in 2 .. n step 2)
        sum+=i
    println("Tổng chẵn=$sum")
}

Chương trình chạy mỗi lần tăng i lên 2 đơn vị, ta khởi tạo i chạy từ 2 nên nó sẽ tự động tăng thành các số chẵn, gặp 10 thì nó thực hiện và kết thúc vòng lặp.

Được thực hiện, với kết quả: Tổng chẵn =30

4. Loại for thứ 4 – Điều hướng bước nhảy downTo

for (i in b downTo a) { Xử lý biến i }

Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động giảm dần từ b cho tới a, nhưng mỗi lần duyệt nó giảm 1 đơn vị. Ta có thể thay tên biến i thành tên biến bất kỳ

for (i in b downTo a step x) { Xử lý biến i }

Với cú pháp ở trên thì biến i thực ra là biến bước nhảy, nó tự động giảm dần từ b cho tới a, nhưng mỗi lần duyệt nó giảm x đơn vị. Ta có thể thay tên biến i thành tên biến bất kỳ

Ví dụ 4: Viết chương trình tính Ước số chung lớn nhất của 2 số bất kỳ

fun main(args: Array<String>) {
    var a:Int=9
    var b:Int=6
    var ucscln=1
    var min=if (a>b) b else a
    for (i in min downTo 1)
    {
        if(a%i==0 && b%i==0)
        {
            ucscln=i
            break
        }
    }
    println("USCL của $a và $b = $ucscln")
}

Được thực hiện, với kết quả: USCL của 9 và 6 = 3

5. Loại for thứ 5 – Lặp tập đối tượng

for (item in collection)
{
println(item)
}

Cấu trúc for trên sẽ duyệt từng đối tượng trong một tập đối tượng

Ví dụ 5: Duyệt danh sách tên sản phẩm

fun main(args: Array<String>) {
    var dsSanPham= arrayOf("kotlin","java","c#","python","R")
    for (item in dsSanPham)
        println(item)
}

Đoạn code trên, chương trình sẽ duyệt tuần tự từng phần tử trong mảng dsSanPham và xuất tên của chúng ra.

Ngoài ra ta cũng có thể duyệt theo vị trí, từ vị trí này ta có thể xuất ra giá trị như sau:

fun main(args: Array<String>) {
    var dsSanPham= arrayOf("kotlin","java","c#","python","R")
    for (i in dsSanPham.indices)
        println("Sản phâm thứ $i có tên "+dsSanPham[i])    
}

Cuối cùng kotlin cũng hỗ trợ vừa lấy vị trí vừa lấy giá trị theo cách sau:

fun main(args: Array<String>) {
    var dsSanPham= arrayOf("kotlin","java","c#","python","R")
    for ((index,value) in dsSanPham.withIndex())
    {
        println("Sản phẩm thứ $index có tên $value")
    }
}