Flow Control
Java Control Flow
Câu lệnh điều khiển trong Java có thể chia thành ba loại chính:
- Câu lệnh điều kiện
- if, else-if, else
- switch
- Câu lệnh lặp
- while
- do…while
- for
- foreach
- Câu lệnh ngắt
- break
- continue
- return
Câu lệnh điều kiện
Câu lệnh if
Câu lệnh if kiểm tra xem biểu thức trong dấu ngoặc đơn có đúng hay không. Nếu đúng, thì khối mã lệnh bên trong câu lệnh if sẽ được thực thi, ngược lại, nó sẽ bỏ qua khối mã lệnh đó và tiếp tục thực thi các câu lệnh tiếp theo.
Cú pháp
if (biểu_thức) {
// Nếu biểu thức là true, thực thi các câu lệnh trong khối này
}Ví dụ
public class IfDemo {
public static void main(String args[]) {
int x = 10;
if (x < 20) {
System.out.print("Đây là câu lệnh if");
}
}
}
// output:
// Đây là câu lệnh ifCâu lệnh if…else
Câu lệnh if có thể được kết hợp với câu lệnh else để thực thi một khối mã lệnh khác khi biểu thức trong câu lệnh if là sai.
Cú pháp
if (biểu_thức) {
// Nếu biểu thức là true, thực thi các câu lệnh trong khối này
} else {
// Nếu biểu thức là false, thực thi các câu lệnh trong khối này
}Ví dụ
public class IfElseDemo {
public static void main(String args[]) {
int x = 30;
if (x < 20) {
System.out.print("Đây là câu lệnh if");
} else {
System.out.print("Đây là câu lệnh else");
}
}
}
// output:
// Đây là câu lệnh elseCâu lệnh if…else if…else
- Câu lệnh
ifcó thể có tối đa 1 câu lệnhelsevà câu lệnhelsephải đứng sau tất cả các câu lệnhelse if. - Câu lệnh
ifcó thể có nhiều câu lệnhelse if, nhưng chúng phải đứng trước câu lệnhelse. - Một khi một câu lệnh
else ifđược thực thi, các câu lệnhelse ifvàelsekhác sẽ được bỏ qua.
Cú pháp
if (biểu_thức 1) {
// Nếu biểu thức 1 là true, thực thi các câu lệnh trong khối này
} else if (biểu_thức 2) {
// Nếu biểu thức 2 là true, thực thi các câu lệnh trong khối này
} else if (biểu_thức 3) {
// Nếu biểu thức 3 là true, thực thi các câu lệnh trong khối này
} else {
// Nếu tất cả các biểu thức trên đều là false, thực thi các câu lệnh trong khối này
}Ví dụ
public class IfElseifElseDemo {
public static void main(String args[]) {
int x = 3;
if (x == 1) {
System.out.print("Giá trị của X là 1");
} else if (x == 2) {
System.out.print("Giá trị của X là 2");
} else if (x == 3) {
System.out.print("Giá trị của X là 3");
} else {
System.out.print("Đây là câu lệnh else");
}
}
}
// output:
// Giá trị của X là 3Câu lệnh if lồng nhau
Có thể sử dụng câu lệnh if else lồng nhau. Điều này có nghĩa là bạn có thể sử dụng câu lệnh if hoặc else if trong một câu lệnh if hoặc else if khác.
Cú pháp
if (biểu_thức 1) {
// Nếu biểu thức 1 là true, thực thi các câu lệnh trong khối này
if (biểu_thức 2) {
// Nếu biểu thức 2 là true, thực thi các câu lệnh trong khối này
}
}Ví dụ
public class IfNestDemo {
public static void main(String args[]) {
int x = 30;
int y = 10;
if (x == 30) {
if (y == 10) {
System.out.print("X = 30 và Y = 10");
}
}
}
}
// output:
// X = 30 và Y = 10Câu lệnh switch
Câu lệnh switch kiểm tra một biến với một loạt các giá trị để xem nó có bằng với giá trị nào đó hay không. Mỗi giá trị được gọi là một nhánh.
Câu lệnh switch có các quy tắc sau:
- Kiểu biến trong câu lệnh
switchchỉ có thể làbyte、short、int、charhoặcString. - Câu lệnh
switchcó thể có nhiều câu lệnhcase. Mỗi câu lệnhcaseđược theo sau bởi một giá trị để so sánh và dấu hai chấm. - Kiểu dữ liệu của giá trị trong câu lệnh
casephải giống với kiểu dữ liệu của biến và chỉ có thể là hằng số hoặc giá trị chữ cái. - Khi giá trị của biến bằng với giá trị trong câu lệnh
case, các câu lệnh sau câu lệnhcaseđó sẽ được thực thi cho đến khi gặp câu lệnhbreak. - Khi gặp câu lệnh
break, câu lệnhswitchkết thúc. Chương trình nhảy đến câu lệnh sau câu lệnhswitch. Câu lệnhcasekhông nhất thiết phải chứa câu lệnhbreak. Nếu không có câu lệnhbreak, chương trình sẽ tiếp tục thực thi câu lệnhcasetiếp theo cho đến khi gặp câu lệnhbreak. - Câu lệnh
switchcó thể chứa một nhánhdefault, nhánh này phải là nhánh cuối cùng của câu lệnhswitch. Nhánhdefaultsẽ được thực thi khi không có giá trị của câu lệnhcasenào khớp với giá trị của biến.
Cú pháp
switch (biểu_thức) {
case giá_trị:
// Các câu lệnh
break; // Tùy chọn
case giá_trị:
// Các câu lệnh
break; // Tùy chọn
// Bạn có thể có bất kỳ số lượng câu lệnh case nào
default: // Tùy chọn
// Các câu lệnh
break; // Tùy chọn, nhưng nên có
}Ví dụ
public class SwitchDemo {
public static void main(String args[]) {
char grade = 'C';
switch (grade) {
case 'A':
System.out.println("Xuất sắc!");
break;
case 'B':
case 'C':
System.out.println("Làm tốt");
break;
case 'D':
System.out.println("Bạn đã qua môn");
case 'F':
System.out.println("Hãy cố gắng thêm");
break;
default:
System.out.println("Điểm không hợp lệ");
break;
}
System.out.println("Điểm của bạn là " + grade);
}
}
// output:
// Làm tốt
// Điểm của bạn là CCâu lệnh lặp
Vòng lặp while
Vòng lặp while sẽ tiếp tục thực hiện mã lệnh trong khối lệnh cho đến khi biểu thức boolean trở thành false.
Cú pháp
while (biểu_thức) {
// mã lệnh
}Ví dụ
public class WhileDemo {
public static void main(String args[]) {
int x = 10;
while (x < 20) {
System.out.print("giá trị của x : " + x);
x++;
System.out.print("\n");
}
}
}
// output:
// giá trị của x : 10
// giá trị của x : 11
// giá trị của x : 12
// giá trị của x : 13
// giá trị của x : 14
// giá trị của x : 15
// giá trị của x : 16
// giá trị của x : 17
// giá trị của x : 18
// giá trị của x : 19Vòng lặp do…while
Vòng lặp do…while tương tự như vòng lặp while, nhưng khối lệnh sẽ được thực thi ít nhất một lần, ngay cả khi biểu thức boolean là false.
Cú pháp
do {
// mã lệnh
} while (biểu_thức);Biểu thức boolean được đặt sau khối lệnh, vì vậy khối lệnh sẽ được thực thi trước khi kiểm tra biểu thức boolean. Nếu giá trị của biểu thức boolean là true, khối lệnh sẽ được thực thi tiếp tục. Nếu giá trị của biểu thức boolean là false, vòng lặp sẽ kết thúc và chương trình sẽ tiếp tục thực hiện các câu lệnh sau vòng lặp.
Ví dụ
public class DoWhileDemo {
public static void main(String args[]) {
int x = 10;
do {
System.out.print("giá trị của x : " + x);
x++;
System.out.print("\n");
} while (x < 20);
}
}
// output:
// giá trị của x : 10
// giá trị của x : 11
// giá trị của x : 12
// giá trị của x : 13
// giá trị của x : 14
// giá trị của x : 15
// giá trị của x : 16
// giá trị của x : 17
// giá trị của x : 18
// giá trị của x : 19Vòng lặp for
Mặc dù tất cả các vòng lặp có thể được biểu diễn bằng cách sử dụng while hoặc do…while, nhưng Java cung cấp một cú pháp đặc biệt cho vòng lặp for, làm cho một số vòng lặp trở nên dễ dàng hơn.
Vòng lặp for thực hiện một số lần lặp đã biết trước.
Cú pháp
for (khởi_tạo; biểu_thức; cập_nhật) {
// mã lệnh
}- Đầu tiên, khởi tạo được thực hiện. Bạn có thể khai báo một biến mới hoặc khởi tạo một biến đã tồn tại.
- Sau đó, biểu thức được kiểm tra. Nếu giá trị của biểu thức là
true, khối lệnh sẽ được thực thi. Nếu giá trị của biểu thức làfalse, vòng lặp sẽ kết thúc và chương trình sẽ tiếp tục thực hiện các câu lệnh sau vòng lặp. - Sau khi thực hiện khối lệnh, cập nhật được thực hiện. Thường là tăng giá trị của biến điều khiển vòng lặp.
- Sau đó, biểu thức được kiểm tra lại. Quá trình này tiếp tục cho đến khi giá trị của biểu thức là
false.
Ví dụ
public class ForDemo {
public static void main(String args[]) {
for (int x = 10; x < 20; x = x + 1) {
System.out.print("giá trị của x : " + x);
System.out.print("\n");
}
}
}
// output:
// giá trị của x : 10
// giá trị của x : 11
// giá trị của x : 12
// giá trị của x : 13
// giá trị của x : 14
// giá trị của x : 15
// giá trị của x : 16
// giá trị của x : 17
// giá trị của x : 18
// giá trị của x : 19Vòng lặp foreach
Java 5 giới thiệu một vòng lặp foreach được sử dụng chủ yếu cho mảng.
Cú pháp
for (kiểu_đối_tượng biến : mảng) {
// mã lệnh
}kiểu_đối_tượng: Khai báo một biến mới có kiểu dữ liệu của các phần tử trong mảng.
biến: Tên biến mới được khai báo, đại diện cho từng phần tử trong mảng.
mảng: Tên mảng hoặc biểu thức trả về một mảng.
Ví dụ
public class ForeachDemo {
public static void main(String args[]) {
int[] numbers = { 10, 20, 30, 40, 50 };
for (int x : numbers) {
System.out.print(x);
System.out.print(",");
}
System.out.print("\n");
String[] names = { "James", "Larry", "Tom", "Lacy" };
for (String name : names) {
System.out.print(name);
System.out.print(",");
}
}
}
// output:
// 10,20,30,40,50,
// James,Larry,Tom,Lacy,Câu lệnh ngắt
Từ khóa break
break được sử dụng chủ yếu trong vòng lặp hoặc câu lệnh switch, để thoát khỏi toàn bộ khối lệnh.
break sẽ thoát khỏi vòng lặp hiện tại và tiếp tục thực hiện các câu lệnh sau vòng lặp.
Ví dụ
public class BreakDemo {
public static void main(String args[]) {
int[] numbers = { 10, 20, 30, 40, 50 };
for (int x : numbers) {
if (x == 30) {
break;
}
System.out.print(x);
System.out.print("\n");
}
System.out.println("Kết thúc ví dụ về break");
}
}
// output:
// 10
// 20
// Kết thúc ví dụ về breakTừ khóa continue
continue được sử dụng trong bất kỳ cấu trúc lặp nào. Nó cho phép chương trình nhảy ngay lập tức đến lần lặp tiếp theo.
Ví dụ
public class ContinueDemo {
public static void main(String args[]) {
int[] numbers = { 10, 20, 30, 40, 50 };
for (int x : numbers) {
if (x == 30) {
continue;
}
System.out.print(x);
System.out.print("\n");
}
}
}
// output:
// 10
// 20
// 40
// 50Từ khóa return
return dùng để thoát khỏi toàn bộ khối lệnh của một phương thức. Các câu lệnh sau return trong phương thức sẽ không được thực thi.
Ví dụ
public class ReturnDemo {
public static void main(String args[]) {
int[] numbers = { 10, 20, 30, 40, 50 };
for (int x : numbers) {
if (x == 30) {
return;
}
System.out.print(x);
System.out.print("\n");
}
System.out.println("Kết thúc ví dụ về return");
}
}
// output:
// 10
// 20🔔 Lưu ý: Hãy lưu ý sự khác biệt giữa
returnvàbreak.
Thực hành
- Trong trường hợp có nhiều lựa chọn, câu lệnh
switchtốt hơn câu lệnhif…else if…else. - Đừng ngần ngại sử dụng
defaulttrong câu lệnhswitch. - Đặt câu lệnh
defaultcuối cùng trong câu lệnhswitch. - Uu tiên vòng lặp
foreachhơn vòng lặpfortruyền thống. - Không lặp qua các phần tử của một collection và xóa các phần tử cụ thể. Cách đúng là lặp qua iterator của collection và xóa phần tử.