Chương cấu trúc điều khiển này sẽ trình bày cách sử dụng các cấu trúc điều khiển trong quá trình viết chương trình. Tất cả các ngôn ngữ lập trình đều hỗ trợ các cấu trúc điều khiển tương tự nhau.Việc hiểu rõ bản chất của mỗi cấu trúc điều khiển trong từng ngôn ngữ lập trình cụ thể là rất quan trọng đối với người lập trình.
Để khởi đầu cho việc làm quen với các cấu trúc điều khiển lập trình trong Java, trước hết các bạn cần hiểu qua về khái niệm khối lệnh: Khối lệnh (block) là một tập hợp các lệnh nằm trong một cặp dấu ngoặc nhọn (bắt đầu bởi dấu {
và kết thúc bởi dấu }
). Các khối lệnh có thể lồng nhau, tức là một khối lệnh có thể nằm bên trong một khối lệnh khác.
Bài đầu tiên trong chương cấu trúc điều khiển này tôi sẽ giới thiệu với các bạn về cấu trúc điều khiển đầu tiên đó là cấu trúcif - else
và sau đó tôi sẽ đưa ra một số ví dụ, bài tập vận dụng cấu trúc này.
1. Cấu trúc điều khiển if – else.
Trong ngôn ngữ lập trình Java cũng như các ngôn ngữ lập trình khác, cấu trúc điều khiển if – else sẽ kiểm tra kết quả của 1 điều kiện và dựa vào kết quả đó để thực hiện các hành động tương ứng.
Cấu trúc if – else có 4 dạng chính mà tôi sẽ giới thiệu ngay sau đây.
Cấu trúc if khuyết else.
1
2
3
4
|
if (điều kiên 1 ) { // hành động 1 } // Lệnh kế tiếp |
trong đó điều kiện là 1 biểu thức nào đó bao gồm các biểu thức toán học (so sánh, ...).
Lưu đồ hoạt động:
Giải thích hoạt động của lưu đồ trên: Lưu đồ trên cho thấy khi biên dịch chương trình thì trình biên dịch sẽ vào kiểm tra biểu thức điều kiện trong if
. Nếu biểu thức điều kiện đó trả về kết quả là đúng (true
) thì hành động tương ứng nằm bên trong khối lệnh sẽ được thực hiện, còn nếu biểu thức điều kiện đó trả về kết quả là sai (false
) thì sẽ kết thúc câu lệnh điều khiển và một số câu lệnh khác sẽ được thi hành.
Ví dụ dưới đây sẽ so sánh 2 số và hiển thị ra màn hình số nhỏ nhất trong 2 số.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package cau_truc_ifelse; import java.util.Scanner; public class TimSoNhoNhat { public static void main(String[] args) { int firstNumber, secondNumber; Scanner scanner = new Scanner(System.in); System.out.println( "Nhập vào số thứ nhất: " ); firstNumber = scanner.nextInt(); System.out.println( "Nhập vào số thứ hai: " ); secondNumber = scanner.nextInt(); int minNumber = firstNumber; // gán giá trị của biến firstNumber cho minNumber /* * So sánh firstNumber với secondNumber * Nếu firstNumber lớn hơn secondNumber thì sẽ gán giá trị của secondNumber cho minNumber * Còn không thì không làm gì cả và kết thúc câu lệnh điều khiển. */ if (firstNumber > secondNumber) minNumber = secondNumber; System.out.println( "Số nhỏ nhất trong 2 số " + firstNumber + " và " + secondNumber + " là " + minNumber); } } |
Kết quả sau khi biên dịch chương trình:
Cấu trúc if – else đầy đủ.
1
2
3
4
5
6
|
if (điều kiên 1 ) { // hành động 1 } else { // hành động 2 } // Lệnh kế tiếp |
Lưu đồ hoạt động:
Giải thích hoạt động của lưu đồ trên: Trong lưu đồ này, việc thực hiện của chương trình sẽ rẽ thành hai nhánh tùy theo kết quả của biểu thức điều kiện. Nếu biểu thức điều kiện trả về kết quả đúng thì các lệnh trong khối lệnh của lệnhif
được thực hiện; ngược lại thì những lệnh trong khối lệnh của lệnh else
được thực hiện.
Ví dụ dưới đây sẽ kiểm tra số bạn vừa nhập vào là số chẵn hay lẻ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package cau_truc_ifelse; import java.util.Scanner; public class KiemTraSoChanLe { public static void main(String[] args) { int number; Scanner scanner = new Scanner(System.in); System.out.println( "Nhập vào số cần kiểm tra: " ); number = scanner.nextInt(); // số chẵn là số chia hết cho 2 if (number % 2 == 0 ) { System.out.println(number + " là số chẵn" ); } else { // ngược lại là số lẻ System.out.println(number + " là số lẻ" ); } } } |
Kết quả sau khi biên dịch chương trình:
Cấu trúc điều khiển if – else if – else.
Cấu trúc điều khiển if - else if - else
là một tập hợp các câu lệnh if
, <tt>else if</tt>
và else
được dùng để giải quyết những yêu cầu phức tạp mà chương trình đề ra.
1
2
3
4
5
6
7
8
9
10
|
if (điều kiên 1 ) { // hành động 1 } else if (điều kiện 2 ) { // hành động 2 } else if (điều kiện 3 ) { // hành động 3 } ... else { // hành động n } // Lệnh kế tiếp |
Lưu đồ hoạt động:
Giải thích hoạt động của lưu đồ trên: Trong lưu đồ này, việc thực hiện của chương trình sẽ rẽ thành nhiều nhánh tùy theo kết quả của biểu thức điều kiện. Nếu biểu thức điều kiện trả về kết quả đúng thì các lệnh trong khối lệnh của lệnh if
được thực hiện, nếu không thì các lệnh trong khối lệnh của lệnh else if
được thực hiện. Và nếu tất cả các kết quả biểu thức điều kiện của if
và else if
đều không đúng thì câu lệnh trong else
sẽ được thực thi.
Ví dụ dưới đây sẽ so sánh số bạn nhập vào với 10 và hiển thị ra kết quả so sánh.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package cau_truc_ifelse; import java.util.Scanner; public class SoSanhVoiSo10 { public static void main(String[] args) { float number; Scanner scanner = new Scanner(System.in); System.out.println( "Nhập vào số cần so sánh: " ); number = scanner.nextFloat(); if (number < 10 ) { System.out.println( "Số bạn vừa nhập nhỏ hơn 10" ); } else if (number == 10 ) { System.out.println( "Số bạn vừa nhập bằng 10" ); } else { System.out.println( "Số bạn vừa nhập lớn hơn 10" ); } } } |
Kết quả sau khi biên dịch chương trình:
Giải thích hoạt động của chương trình:
Các bạn thấy khi biên dịch chương trình tôi nhập vào số 12.1 thì trình biên dịch sẽ tiến hành thực hiện các bước sau:
Bước 1: Kiểm tra số 12.1 có nhỏ hơn 10 hay không? Vì số 12.1 lớn hơn 10 nên kết quả của biểu thức so sánh number < 10
sẽ trả về false, vì vậy câu lệnh trong khối lệnh if
sẽ không được thực hiện.
Bước 2: Kiểm tra số 12.1 có bằng 10 hay không? Kết quả là số 12.1 không bằng 10 nên câu lệnh trong khối lệnh củaelse if (number == 10)
sẽ bị trình biên dịch bỏ qua.
Bước 3: Vì tất cả các biểu thức so sánh của if
và else if
đều sai nên câu lệnh trong else
sẽ được thực thi và lúc này kết quả của chương trình sẽ là “Số bạn vừa nhập lớn hơn 10“.
Cấu trúc if – else lồng nhau.
Cấu trúc if – else lồng nhau (hay còn gọi là if bên trong if) là cấu trúc phức tạp nhất của cấu trúc điều khiểnif - else
. Cú pháp của cấu trúc này như sau:
1
2
3
4
5
6
7
8
9
10
|
if (điều kiện 1 ) { // Nếu điều kiện 1 trả về kết quả đúng thì điều kiện 2 trong if bên dưới sẽ được kiểm tra if (điều kiện 2 ) { // Nếu điều kiện 2 trả về kết quả đúng thì hành động trong if sẽ được thực hiện } else { // Nếu điều kiện 2 trả về kết quả sai thì hành động trong else sẽ được thực hiện } } else { // Nếu điều kiện 1 trả về kết quả sai thì hành động trong else này sẽ được thực hiện } |
Ví dụ dưới đây sẽ yêu cầu bạn nhập 3 số bất kỳ từ bàn phím và hiển thị ra màn hình số lớn nhất trong 3 số đó.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package cau_truc_ifelse; import java.util.Scanner; public class TimSoLonNhatTrong3So { public static void main(String[] args) { int firstNumber, secondNumber, thirdNumber, largestNumber; Scanner scanner = new Scanner(System.in); System.out.println( "Nhập vào số thứ nhất: " ); firstNumber = scanner.nextInt(); System.out.println( "Nhập vào số thứ hai: " ); secondNumber = scanner.nextInt(); System.out.println( "Nhập vào số thứ ba: " ); thirdNumber = scanner.nextInt(); if (firstNumber >= secondNumber) { if (firstNumber >= thirdNumber) { largestNumber = firstNumber; } else { largestNumber = thirdNumber; } } else if (secondNumber >= thirdNumber) { largestNumber = secondNumber; } else { largestNumber = thirdNumber; } System.out.println( "Số lớn nhất trong 3 số " + firstNumber + ", " + secondNumber + " và " + thirdNumber + " là " + largestNumber); } } |
Kết quả sau khi biên dịch chương trình:
Giải thích hoạt động của chương trình:
Trong chương trình này, tôi nhập vào 3 số lần lượt là 9, 20 và 2 thì trình biên dịch sẽ tiến hành thực hiện các bước sau:
Bước 1: Biểu thức if (firstNumber >= secondNumber)
so sánh số 9 nhỏ hơn 20 nên trả về kết quả là sai nên các câu lệnh tiếp theo trong khối lệnh if
này sẽ không được thực thi.
Bước 2: Biểu thức else if (secondNumber >= thirdNumber)
sẽ so sánh số 20 và 2 thì thấy 20 lớn hơn 2 nên trình biên dịch sẽ gán giá trị 20 cho biến largestNumber
.
Bước 3: Hiển thị giá trị của biến largestNumber
ra màn hình. Quá trình biên dịch kết thúc.
2. Cấu trúc toán tử điều kiện 3 ngôi.
Toán tử điều kiện 3 ngôi là cấu trúc thay thế của biểu thức điều kiện if - else
trong Java.
Cú pháp:
1
|
[Biểu thức điều kiện] ? [Giá trị 1 ] : [Giá trị 2 ]; |
Công dụng: Toán tử điều kiện 3 ngôi sẽ kiểm tra giá trị của biểu thức điều kiện, nếu biểu thức này trả về giá trị đúng thì biểu thức giá trị 1 được tính toán và trở thành giá trị của biểu thức, nếu biểu thức điều kiện trả về giá trị sai thì biểu thức giá trị 1 được tính toán và trở thành giá trị của biểu thức.
Đoạn chương trình dưới đây sẽ kiểm tra số nhập vào là số chẵn hay lẻ bằng cách sử dụng toán tử điều kiện 3 ngôi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package cau_truc_ifelse; import java.util.Scanner; public class ToanTuDieuKien3Ngoi { public static void main(String[] args) { int number; Scanner scanner = new Scanner(System.in); System.out.println( "Nhập vào số cần kiểm tra: " ); number = scanner.nextInt(); /* * Sử dụng toán tử điều kiện 3 ngôi */ String ketQua = (number % 2 == 0 ) ? "Số " + number + " là số chẵn" : "Số " + number + " là số lẻ" ; System.out.println(ketQua); } } |
Kết quả sau khi biên dịch chương trình:
Giải thích hoạt động của chương trình: Trong chương trình này, tôi nhập số cần kiểm tra là số 3 thì trình biên dịch sẽ kiểm tra số 3 là số không chia hết cho 2 nên biểu thức number % 2 == 0
sẽ trả về kết quả là sai nên biểu thức phía sau dấu :
sẽ được thực thi. Vì vậy, trình biên dịch sẽ hiển thị ra thông báo “Số 3 là số lẻ“.
3. Lời kết.
Trong bài này tôi đã giới thiệu đến các bạn cấu trúc điều khiển đầu tiên đó là cấu trúc điều khiển if – else và các dạng chính của nó.
Theo: freetuts.net