Vòng lặp for trong java với ví dụ cụ thể

Trong lập trình không riêng gì với ngôn ngữ java, khi chúng ta có một tập dữ liệu input cần xử lý chẳng hạn như tìm kiếm, rút trích, bóc tách dữ liệu từ input hoặc đơn giảm là lặp đi lặp lại một công việc gì đó N lần.

Để giải quyết vấn đề trên chúng ta cần sử dụng đến kỹ thuật gọi là vòng lặp. Trong java cung cấp cho chúng ta 3 cách để thực thi vòng lặp: for, whiledo – while. Trước tiên chúng ta sẽ tìm hiểu vòng lặp for trước nhé.

Cú pháp vòng lặp for

for (khởi tạo; điều kiện; tăng/giảm) {
   // code block inside for
}

Ôi, nhìn cú pháp có vẽ khó hiểu, chúng ta sẽ lấy một ví dụ cụ thể nào. Mình sẽ xuất ra màn hình console từ 1 đến 3.

public class Main {

    public static void main(String[] args) {

        for(int i = 1; i <= 3; i++) {
            System.out.println("value is " + i);
        }
    }
}

Output:

value is 1
value is 2
value is 3

Giải thích: 

  • Lần lặp đầu tiên: Khởi tạo biến i = 1 => so sánh biến i <= 3 ta được giá trị true => thực hiện code bên trong vòng lặp ta được Value is 1 => i++ ta được i = 2.
  • Lần lặp thứ 2: i = 2 => so sánh i <= 3 ta được true => thực hiện code bên trong vòng lặp ta được Value is 2 => i++ ta được i = 3.
  • Lần lặp thứ 3: i = 3 => so sánh i <= 3 true => thực hiện code bên trong vòng lặp được Value is 3 => i++ ta được i = 4.
  • Lần lặp thứ 4: i = 4 so sánh i <= 3 được false => thoát khỏi vòng lặp.

Sơ đồ thực hiện của vòng lặp forr

Vòng lặp trong java(Loop in java)

Vòng lặp vô hạn

Đây là một điểm hết sức lưu ý. Khi các code mà không để ý dẫn đến việc chạy vòng lặp vô hạn, bạn sẽ ngồi chờ mòn mỏi mà không hiểu tại sao ứng dụng của mình lại chạy mãi mà không thấy dừng. Cho đến khi tràn bộ nhớ thì nó sẽ quăng ra lỗi. Ở đây mình xin phép không chạy demo vì nó hại máy lắm =))))

Bạn có thể chạy vòng lặp vô hạn bằng các cách sau

Cách 1: Có chủ ý

for ( ; ; ) {
    // code block
}

Cách 2: code lụi =)

public class Main {

    public static void main(String[] args) {

        for(int i = 0; i >=0; i++) {
            System.out.println("value is " + i);
        }
    }
}

Các bạn thấy, điều kiện dừng vòng for mình viết sẽ luôn đúng (i bắt đầu từ 0 mà sau mỗi lần lặp cứ tăng lên 1 thì lúc nào mà chẳng >= 0) cho nên sẽ không bao giờ nó thoát khỏi vòng lặp đâu.

Vòng lặp for – each trong java

Mình xin gọi vòng lặp for truyền thống là: (for (khởi tạo; điều kiện; tăng/giảm) được mình dưới thiệu ở trên.

Khi chúng ta làm việc với các tập dữ liệu trong java như array, list etc.  Nếu như cầu của chúng ta chỉ là duyệt qua tập dữ liệu mà không cần quan đến vị trí đang được duyệt thì việc khởi tạo biến đếm, kiểm tra điều kiện, cập nhập biến đếm là không cần thiết đôi lúc còn làm cho chúng ta bị lỗi dẫn đến vòng lặp vô hạn.

Để giải quyết vấn đề trên, chúng ta có một cách tiếp cận mới, đó là for-each giúp chúng ta duyệt tập dữ liệu mà không thao tác phiền phức như vòng lặp for truyền thống.

Cú pháp

for(<kiểu dữ liệu của tập dữ liệu> item : tập dữ liệu) {
   // code block
}

Ví dụ

public class Main {

    public static void main(String[] args) {

        int[] arr = {1, 3, 5};
        for(int item : arr) {
            System.out.println(item);
        }
    }
}

Output: 

1

3

5

Nên Sử dụng for-each hay for truyền thống?

Như mình đã nêu những điểm lợi của for – each thì nhiều bạn nghĩ rằng for truyền thống nên bỏ đi. =) um. Mình có nói rõ là nếu như các bạn chỉ muốn duyệt thì dùng for – each là tốt. 

Thế nên tuỳ vào trường hợp mà sử dụng các bạn nhé chứ không phải lúc nào cũng for – each được đâu. 

Bài tập thực hành

Sử dụng vòng lặp for để hoàn thành các bài tập sau:

1, Viết chương trình tính tổng các số nguyên từ 1 đến 10.

2, Viết chương trình tìm một số nguyên a trong mảng arr cho trước. a được nhập vào từ bàn phím. Xuất ra màn hình vị trí của a trong mảng nếu tìm thấy, ngược lại là “khong tim thay”.

3, Cho một mảng số nguyên arr, viết chương trình java xuất ra giá trị đảo ngược mảng, ví dụ arr[] = {1, 2, 3, 4, 5} => output 5, 4, 3, 2, 1.

4, Viết chương trình in dãy số fibonacci của n, với n là số nguyên nhập vào từ bàn phím.

Bài tham khảo

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        /*
            1, Viết chương trình tính tổng các số nguyên từ 1 đến 10.
         */

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

        System.out.println("Tong 1 den 10: " + sum);




        /*
            2, Viết chương trình tìm một số nguyên a trong mảng arr cho trước. a được nhập vào từ bàn phím.
         */

        int arr[] = {1, 2, 4, 6, 7, 8, 9};
        int a = 4;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == a) {
                System.out.println("Vi tri: " + i);
                break;
            }
        }


        /*
            3, Cho một mảng số nguyên arr, viết chương trình java đảo ngược mảng, ví dụ arr[] = {1, 2, 3, 4, 5} => output {5, 4, 3, 2, 1}.
         */

        int[] arr3 = {1, 2, 3, 4, 5};
        for (int i = arr3.length - 1; i >= 0; i--) {
            System.out.print(arr3[i] +  " ");
        }

        /*
            4, Viết chương trình in dãy số fibonacci của n, với n là số nguyên nhập vào từ bàn phím.
         */

        System.out.print("Nhap n: ");
        int fb = scanner.nextInt();
        int f1 = 0, f2 = 1;

        System.out.print(f1 + " ");
        System.out.print(f2 + " ");
        for (int i = 2; i <= fb; i++) {
            int newf = f1 + f2;
            System.out.print(newf + " ");
            f1 = f2;
            f2 = newf;
        }

    }

}
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x