Vòng lặp trong Java
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:
- Vòng lặp for
- Vòng lặp while
- Vòng lặp do-while
Vòng lặp for có 2 biến thể:
- Vòng lặp for thông thường.
- 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:
Step =1 value = 0
Step =2 value = 3
Step =3 value = 6
Step =4 value = 9
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ả
Total = 5050
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ụ:
Apple
Apricot
Banana
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ả
Value = 3
Value = 6
Value = 9
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ụ:
Break example
----------------------
x = 2
x after ++ = 3
----------------------
x = 3
x after ++ = 4
----------------------
x = 4
x after ++ = 5
----------------------
x = 5
Done!
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ụ:
Continue example
----------------------
x = 2
x after ++ = 3
----------------------
x = 3
----------------------
x = 4
x after ++ = 5
----------------------
x = 5
----------------------
x = 6
x after ++ = 7
Done!
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ụ:
Labelled Loop Break example
----------------------
i = 0
--> 0
--> 1
Done!
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ụ:
Labelled Loop Continue example
outer i= 0
inner i= 1, j= 0
outer i= 1
outer i= 2
outer i= 3
outer i= 4
Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
Show More
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud