Vòng lặp trong Java

Xem thêm các chuyên mục:

1- Các vòng lặp trong Java

Trong lập trình máy tính (computer programming), vòng lặp được sử dụng một cách thường xuyên, và mục đích là để thực thi nhiều lần một đoạn chương trình. Java hỗ trợ 3 loại vòng lặp khác nhau:
  1. Vòng lặp for
  2. Vòng lặp while
  3. Vòng lặp do-while
Vòng lặp for có 2 biến thể:
  1. Vòng lặp for thông thường.
  2. Vòng lặp for-each (Được đưa vào từ phiên bản Java 5).
Các lệnh có thể sử dụng trong vòng lặp:
  • break
  • continue.

2- Vòng lặp for

Đây là cấu trúc của vòng lặp:
** for **
// start_value: Giá trị bắt đầu
// end_value: Giá trị kết thúc
// increment_number: Giá trị tăng thêm sau mỗi bước lặp.
for ( start_value; end_value; increment_number ) {
   // Làm gì đó tại đây ...
}
Hãy xem một ví dụ minh họa:
ForLoopExample1.java
package org.o7planning.tutorial.javabasic.loop;

public class ForLoopExample1 {

	public static void main(String[] args) {

		// Khai báo một biến 'step', mô tả bước của vòng lặp (Vòng lặp thứ mấy)
		int step = 1;

		// Khai báo một biến 'value' với giá trị bắt đầu là 0
		// Sau mỗi một bước lặp 'value' lại được công thêm 3
		// Và vòng lặp sẽ kết thúc khi 'value' lớn hơn hoặc bằng 10
		for (int value = 0; value < 10; value = value + 3) {

			System.out.println("Step =" + step + "  value = " + value);

			// Tăng giá trị 'step' lên 1, sau mỗi bước lặp
			step = step + 1;

		}

	}

}
Kết quả chạy class ForLoopExample1:
Xem tiếp một ví dụ khác, tính tổng các số từ 1 tới 100:
ForLoopExample2.java
package org.o7planning.tutorial.javabasic.loop;

public class ForLoopExample2 {

	// Đây là một ví dụ tính tổng các số từ 1 tới 100,
	// và in kết quả ra màn hình.
	public static void main(String[] args) {

		// Khai báo một biến
		int total = 0;

		// Khai báo một biến 'value'
		// Gán giá trị ban đầu 1
		// Sau mỗi bước lặp giá trị của nó tăng lên 1.
		// Chú ý: value++ tương đương với câu lệnh: value = value + 1;
		// value-- tương đương với câu lệnh: value = value - 1;
		for (int value = 1; value <= 100; value++) {

			// Gán giá trị 'total' bằng giá trị cũ cộng thêm 'value'.
			total = total + value;
		}

		System.out.println("Total = " + total);

	}

}
Kết quả

3- Vòng lặp for-each

Vòng lặp for-each được đưa vào Java từ phiên bản 5. Là một vòng lặp được sử dụng để duyệt qua (traverse) một mảng hoặc một tập hợp (collection), nó sẽ di chuyển lần lượt từ phần từ đầu tiên tới phần tử cuối cùng của mảng hoặc tập hợp.
Xem thêm:

Cú pháp:

// arrayOrCollection: Mảng hoặc tập hợp (Collection).
for (Type variable: arrayOrCollection)  {
      // Code ...
}
Ví dụ:
ForeachExample.java
package org.o7planning.tutorial.javabasic.loop;

public class ForeachExample {

	public static void main(String[] args) {

		// Khai báo một mảng các String.
		String[] fruits = new String[] { "Apple", "Apricot", "Banana" };

		// Sử dụng vòng lặp for-each để duyệt các phần tử của mảng.
		for (String fruit : fruits) {

			System.out.println(fruit);

		}

	}

}
Chạy ví dụ:

4- Vòng lặp while

Vòng lặp while được sử dụng để thực thi nhiều lần một đoạn chương trình, khi một điều kiện vẫn còn đúng. Vòng lặp while thường được sử dụng khi số lần lặp không được xác định trước (Không cố định).
Đây là cấu trúc vòng lặp while:
** while **
// Trong khi condition (điều kiện) đúng, thì làm gì đó.
while ( condition ) {
   // Làm gì đó tại đây...
}
Xem ví dụ minh họa
WhileExample1.java
package org.o7planning.tutorial.javabasic.loop;

public class WhileExampe1 {

	public static void main(String[] args) {

		int value = 3;

		// Trong khi 'value' vẫn nhỏ hơn 10 thì vòng lặp vẫn làm việc.
		while (value < 10) {

			System.out.println("Value = " + value);

			// Tăng giá trị của value lên 2 đơn vị
			value = value + 2;
		}
	}
	
}

5- Vòng lặp do-while

Vòng lặp do-while được sử dụng để thực thi một đoạn chương trình nhiều lần. Đặc điểm của do-while là khối lệnh luôn được thực thi ít nhất một lần. Sau mỗi bước lặp (iteration), chương trình lại kiểm tra lại điều kiện, nếu điều kiện vẫn còn đúng, khối lệnh sẽ lại được thực thi.
Đây là cấu trúc vòng lặp do-while:
** do while **
// Vòng lặp do-while làm việc ít nhất 1 bước lặp (iteration)
// và trong khi điều kiện còn đúng thì nó còn làm việc tiếp.
do {
   // Làm gì đó tại đây.
}
while (condition);
Ví dụ minh họa:
DoWhileExample1.java
package org.o7planning.tutorial.javabasic.loop;

public class DoWhileExample1 {

	public static void main(String[] args) {

		int value = 3;

		// Vòng lặp do-while luôn được thực thi ít nhất 1 lần.
		do {

			System.out.println("Value = " + value);

			// Tăng giá trị cho 'value' thêm 3
			value = value + 3;

		} while (value < 10);

	}
}
Kết quả

6- Lệnh break trong vòng lặp

Lệnh break có thể xuất hiện trong một vòng lặp. Nó là lệnh giúp chương trình thoát khỏi vòng lặp.
Ví dụ:
LoopBreakExample.java
package org.o7planning.tutorial.javabasic.loop;

public class LoopBreakExample {

	public static void main(String[] args) {
		
		System.out.println("Break example");

		int x = 2;

		while (x < 15) {

			System.out.println("----------------------\n");
			System.out.println("x = " + x);

			// Kiểm tra nếu x = 5 thì thoát ra khỏi vòng lặp.
			if (x == 5) {
				break;
			}

			x++;
			System.out.println("x after ++ = " + x);

		}

		System.out.println("Done!");

	}

}
Chạy ví dụ:

7- Lệnh continue trong vòng lặp

Lệnh continue có thể xuất hiện trong một vòng lặp, khi bắt gặp lệnh continue chương trình sẽ bỏ qua các dòng lệnh bên trong khối lệnh và phía dưới của continue và bắt đầu một bước lặp (iteration) mới (Nếu các điều kiện vẫn đúng).
Ví dụ:
LoopContinueExample.java
package org.o7planning.tutorial.javabasic.loop;

public class LoopContinueExample {

	public static void main(String[] args) {

		System.out.println("Continue example");

		int x = 2;

		while (x < 7) {

			System.out.println("----------------------\n");
			System.out.println("x = " + x);

			// x = x + 1;
			x++;

			// Toán tử % là phép chia lấy số dư.
			// Nếu x chẵn, thì bỏ qua các dòng lệnh phía dưới của 'continue',
			// và tiếp tục bước lặp (iteration) mới (nếu điều kiện vẫn đúng).
			if (x % 2 == 0) {

				continue;
			}

			System.out.println("x after ++ = " + x);

		}

		System.out.println("Done!");

	}

}
Chạy ví dụ:

8- Vòng lặp có nhãn (Labelled Loop)

Java cho phép bạn dán một nhãn (Label) cho một vòng lặp, nó giống việc bạn đặt tên cho một vòng lặp, điều này có ích khi bạn sử dụng nhiều vòng lặp lồng nhau trong một chương trình.
  • Bạn có thể sử dụng lệnh break labelX; để break vòng lặp được dán nhãn labelX.
  • Bạn có thể sử dụng lệnh continue labelX; để continue vòng lặp được dán nhãn labelX.
Cú pháp:
** Labelled Loops **
// Vòng lặp for với nhãn (Label)
label1: for( ... )  {
    
}

// Vòng lặp while với nhãn (Label)
label2: while ( ... )  {

}

// Vòng lặp do-while với nhãn (Label)
label3: do  {
    
    
} while ( ... );
Ví dụ, sử dụng các vòng lặp lồng nhau, có dán nhãn, và lệnh break có nhãn.
LabelledLoopBreakExample.java
package org.o7planning.tutorial.javabasic.loop;

public class LabelledLoopBreakExample {

	public static void main(String[] args) {

		System.out.println("Labelled Loop Break example");

		int i = 0;

		label1: while (i < 5) {

			System.out.println("----------------------\n");
			System.out.println("i = " + i);
			i++;

			label2: for (int j = 0; j < 3; j++) {

				System.out.println("  --> " + j);
				if (j > 0) {
					// Thoát khỏi vòng lặp có nhãn label1.
					break label1;
				}
			}

		}

		System.out.println("Done!");

	}

}
Chạy ví dụ:
Ví dụ, sử dụng các vòng lặp lồng nhau có dán nhãn, và sử dụng lệnh continue có nhãn.
LabelledLoopContinueExample.java
package org.o7planning.tutorial.javabasic.loop;

public class LabelledLoopContinueExample {

    public static void main(String[] args) {

        System.out.println("Labelled Loop Continue example");

        int i = 0;

        label1: while (i < 5) {
            System.out.println("outer i= " + i);
            i++;

            label2: for (int j = 0; j < 3; j++) {
                if (j > 0) {

                    continue label2;
                }
                if (i > 1) {

                    continue label1;
                }
                System.out.println("inner i= " + i + ", j= " + j);
            }

        }
    }

}

 
Chạy ví dụ:

Xem thêm các chuyên mục: