Cấu Trúc Rẽ Nhánh Switch

1. Mô tả cấu trúc rẽ nhánh switch – case.

Cấu trúc rẽ nhánh switch – case cho phép bạn lựa chọn một trong nhiều phương án có khả năng xảy ra, nó có thể dùng dể thay thế cho cấu trúc điều khiển if - else if - else mà tôi đã trình bày trong bài cấu trúc điều khiển if – else trong Java.

Vậy khi nào chúng ta nên sử dụng cấu trúc rẽ nhánh switch – case thay thế cho cấu trúc điều khiển if - else if - else? Khi mà chúng ta có số trường hợp cần xử lý lớn hơn 3 thì khi đó chúng ta nên sử dụng switch - case để dễ dàng kiểm tra và xử lý, giúp cho chương trình dễ quan sát hơn.

switch (biểu_thức) { case giá_trị_1: Lệnh 1; break; case giá_trị_2: Lệnh 2; break; ... case giá_trị_n: Lệnh n; break; [default: Lệnh 0;] }

trong đó:

Biểu_thức phải trả về kết quả là một số nguyên, chuỗi hoặc một ký tự.

Giá_trị_1, giá_trị_2,..., giá_trị_n là các biểu thức hằng, nguyên hoặc ký tự và chúng phải khác nhau.

Lệnh 1, Lệnh 2, ..., Lệnh n, Lệnh 0 là các lệnh trong thân của switch. Các bạn thấy sau mỗi lệnh này chúng ta có từ khóa break;, từ khóa này có thể có hoặc không có tùy theo từng trường hợp.

Cách thức hoạt động của switch – case như sau:

Đầu tiên, chương trình sẽ so sánh giá trị của biểu_thức với các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n. Nếu trong các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n có giá trị nào bằng với giá trị của biểu_thức thì chương trình sẽ bắt đầu thực hiện các lệnh tương ứng nằm trong case của giá trị đó cho đến khi gặp một lệnh break đầu tiên thì thoát ngay khỏi switch, bỏ qua các case (trường hợp) còn lại và thực hiện lệnh đầu tiên nằm ngay sau cấu trúc này. Nếu giá trị của biểu_thức không bằng với bất kỳ giá trị nào trong danh sách giá_trị_1, giá_trị_2 ... giá_trị_n thì Lệnh 0 sẽ được thực hiện nếu có thành phần default.

Lưu đồ hoạt động:

Dạng 1 là cấu trúc switch có sử dụng từ khóa default, còn dạng 2 là cấu trúc switch không sử dụng từ khóa default.

Lưu ý:

Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu }) (vì chưa gặp break coi như chưa ra khỏi lệnh switch).

Khi sử dụng lệnh switch có thể xảy ra nhiều giá trị trả về cho một trường hợp (một khả năng xảy ra của biểu thức).

2. Ví dụ switch đơn giản.

Chúng ta có ví dụ sau: Nhập vào một số nguyên từ 1 – 12 từ bàn phím và hiển thị ra tháng tương ứng với số đó ( nhập vào số 1 thì sẽ hiển thị ra là “Tháng 1”.

package cau_truc_switch_case; import java.util.Scanner; public class HienThiThangTuongUng { public static void main(String[] args) { int thang; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): "); thang = scanner.nextInt(); switch (thang) { case 1: System.out.println("Tháng 1"); break; case 2: System.out.println("Tháng 2"); break; case 3: System.out.println("Tháng 3"); break; case 4: System.out.println("Tháng 4"); break; case 5: System.out.println("Tháng 5"); break; case 6: System.out.println("Tháng 6"); break; case 7: System.out.println("Tháng 7"); break; case 8: System.out.println("Tháng 8"); break; case 9: System.out.println("Tháng 9"); break; case 10: System.out.println("Tháng 10"); break; case 11: System.out.println("Tháng 11"); break; case 12: System.out.println("Tháng 12"); break; default: System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12."); } } }

Kết quả sau khi biên dịch chương trình:

Nếu bạn nhập vào tháng 14 thì chương trình sẽ hiển thị kết quả như sau:

Giải thích hoạt động của chương trình trên:

Khi chương trình được thực thi, tôi nhập vào số 4 thì chương trình sẽ nhận thấy số 4 đó ứng với giá trị tại chỉ thị case 4 nên chương trình sẽ chạy tới case 4, sau đó thực hiện lệnh bên trong case này – đó là hiển thị ra màn hình dòng thông báo “Tháng 4“.

Giả sử sau đó tôi nhập vào số 14 thì chương trình sẽ nhận thấy nó khác với các giá trị từ 1 đến 12, không ứng với bất kỳ giá trị tại chỉ thị case nào nên trường hợp mặc định (ứng với nhãn default) được làm. Vì vậy, dòng thông báo “Số nhập vào phải nằm trong khoảng từ 1 đến 12” sẽ được hiển thị.

Giả sử tôi sửa đoạn chương trình trên thành như sau:

package cau_truc_switch_case; import java.util.Scanner; public class HienThiThangTuongUng { public static void main(String[] args) { int thang; String thangTuongUng = ""; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): "); thang = scanner.nextInt(); switch (thang) { case 1: thangTuongUng = "Tháng 1"; case 2: thangTuongUng = "Tháng 2"; case 3: thangTuongUng = "Tháng 3"; case 4: thangTuongUng = "Tháng 4"; case 5: thangTuongUng = "Tháng 5"; case 6: thangTuongUng = "Tháng 6"; case 7: thangTuongUng = "Tháng 7"; case 8: thangTuongUng = "Tháng 8"; break; case 9: thangTuongUng = "Tháng 9"; break; case 10: thangTuongUng = "Tháng 10"; break; case 11: thangTuongUng = "Tháng 11"; break; case 12: thangTuongUng = "Tháng 12"; break; default: System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12."); } System.out.println(thangTuongUng); } }

Sau khi biên dịch thì chương trình sẽ hiển thị kết quả như sau:

Các bạn thấy tôi nhập vào số 1 nhưng kết quả hiển thị ra là tháng 8. Các bạn biết vì sao không? Như tôi đã nói ở trên, ” Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu })“, vì vậy khi bạn nhập vào số 1 thì chương trình sẽ lần lượt gán các giá trị tháng tương ứng cho chuỗi thangTuongUng và khi chạy đến case 8 thì lúc này chuỗi thangTuongUng sẽ có giá trị là ” Tháng 8” và sau đó gặp lệnh break nên sẽ kết thúc lệnh switch này và hiển thị giá trị ” Tháng 8” ra màn hình.

3. Ví dụ switch có nhiều giá trị trả về cho một trường hợp.

Các bạn theo dõi ví dụ sau: Viết chương trình nhập vào 1 số nguyên, nếu:

Số nhập vào là 0 thì thông báo “Số 0“.

Số nhập vào là 1, 2 thì thông báo “Số nhỏ“.

Số nhập vào là 3, 4, 5 thì thông báo “Số trung bình“.

Số nhập vào lớn hơn 5 thì thông báo “Số lớn“.

Chúng ta sẽ làm ví dụ này như sau:

package cau_truc_switch_case; import java.util.Scanner; public class HienThiChuoiSoTuongUng { public static void main(String[] args) { int number; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số bất kỳ: "); number = scanner.nextInt(); switch (number) { case 0: System.out.println("Số 0"); break; case 1: case 2: System.out.println("Số nhỏ"); break; case 3: case 4: case 5: System.out.println("Số trung bình"); break; default: System.out.println("Số lớn"); } } }

Kết quả sau khi biên dịch chương trình:

Các bạn thấy trong đề bài trên chúng ta có 3 trường hợp số 3, 4, 5 cùng có kết quả chung là ” Số trung bình“, vì vậy 3 trường hợp này chỉ dùng chung một chỉ thị break. Chẳng hạn khi số nhập vào là 3: chương trình chạy tới case 3, sau đó chạy tiếp và hiển thị dòng thông báo ” Số trung bình” ra màn hình và chỉ nhảy khỏi cấu trúc switch khi gặp chỉ thị break ở dòng 26.

4. Lời kết.

Cấu Trúc Rẽ Nhánh If, If

Các cấu trúc điều khiển

Java cung cấp hai loại lệnh để kiểm soát luồng điều khiển:

lệnh rẽ nhánh (branching) chọn một hành động từ danh sách gồm nhiều hành động.

lệnh lặp (loop) thực hiện lặp đi lặp lại một hành động cho đến khi một điều kiện dừng nào đó được thỏa mãn.

Hai loại lệnh đó tạo thành các cấu trúc điều khiển (control structure) bên trong chương trình.

Các cấu trúc rẽ nhánh

Lệnh if-else

Lệnh if-else (hay gọi tắt là lệnh if) cho phép rẽ nhánh bằng cách lựa chọn thực hiện một trong hai hành động. Ví dụ, trong một chương trình xếp loại điểm thi, nếu điểm của sinh viên nhỏ hơn 4.0, sinh viên đó được coi là trượt, nếu không thì được coi là đỗ. Thể hiện nội dung đó bằng một lệnh if-else của Java, ta có đoạn mã:

if

(score <

4.0

)

   

System.

out

.print(

"Failed"

);

else

   

System.

out

.print(

"Passed"

);

Khi chương trình chạy một lệnh if-else, đầu tiên nó kiểm tra biểu thức điều kiện nằm trong cặp ngoặc đơn sau từ khóa if. Nếu biểu thức có giá trị bằng true thì lệnh nằm sau từ khóa if sẽ được thực hiện. Ngược lại, lệnh nằm sau else sẽ được thực hiện. Chú ý là biểu thức điều kiện phải được đặt trong một cặp ngoặc đơn.

package

codelean.sample;

import

java.util.Scanner;

public class

IfElseExample {

   

public static void

main(String[] args) {

      

// write your code here

       

Scanner input =

new

Scanner(System.

in

);

       

double

score;

       

System.

out

.println(

“Enter your score: “

);

       

score = input.nextDouble();

       

if

(score <

4.0

){

           

System.

out

.println(

“Sorry! You’ve

 

failed the course.”

);

       

}

else

{

           

System.

out

.println(

“Congratulations! You’ve passed the courese.”

);

       

}

   

} }

Chương trình ví dụ trong Hình 2.5 yêu cầu người dùng nhập điểm rồi in ra các thông báo khác nhau tùy theo điểm số đủ đỗ hoặc trượt.

Trong cấu trúc rẽ nhánh if-else, ta có thể bỏ phần else nếu không muốn chương trình thực hiện hành động nào nếu điều kiện không thỏa mãn. Chẳng hạn, nếu muốn thêm một lời khen đặc biệt cho điểm số xuất sắc từ 9.0 trở lên, ta có thể thêm lệnh if sau vào trong chương trình tại

System.

out

.print(

"Excellent!"

);

Ta có thể dùng các cấu trúc

if-else

lồng nhau để tạo ra điều kiện rẽ nhánh phức tạp. Lấy một ví dụ phức tạp hơn: cho trước điểm số (lưu tại biến score kiểu double), xác định xếp loại học lực A, B, C, D, F tùy theo điểm đó. Quy tắc xếp loại là: nếu điểm từ 8.5 trở lên thì đạt loại A, điểm từ 7.0 tới dưới 8.5 đạt loại B, v.v.. Tại đoạn mã xét các trường hợp của xếp loại điểm, ta có thể dùng cấu trúc if-else lồng nhau như sau:

   

grade =

“A”

;

   

grade =

“B”

;

   

grade =

“C”

;

   

grade =

“D”

;

else

   

grade =

“F”

;

Một điều cần đặc biệt lưu ý là nếu muốn thực hiện nhiều hơn một lệnh trong mỗi trường hợp của lệnh if-else, ta cần dùng cặp ngoặc { } bọc tập lệnh đó thành một khối lệnh. Ví dụ, phiên bản phức tạp hơn của lệnh if trong Hình 2.5:

if

(score <

4.0

){

   

System.

out

.println(

“Failed”

);

   

System.

out

.println(

“You have to take this course again”

); }

else

{

   

System.

out

.println(

“Congratulations!!!”

);

   

System.

out

.println(

“You passed this course.”

); }

Lệnh switch

Khi chúng ta muốn viết một cấu trúc rẽ nhánh có nhiều lựa chọn, ta có thể sử dụng nhiều lệnh if-else lồng nhau. Tuy nhiên, trong trường hợp việc lựa chọn rẽ nhánh phụ thuộc vào giá trị (kiểu số nguyên hoặc kí tự, hoặc xâu kí tự kể từ JDK 7.0) của một biến hay biểu thức, ta có thể sử dụng cấu trúc switch để chương trình dễ hiểu hơn. Lệnh switch điển hình có dạng như sau:

switch

(bieu_thuc){

   

case

hang_1:

       

tap_lenh;

       

break

;

   

case

hang_1:

       

tap_lenh;

       

break

;

   

   

default

:

       

tap_lenh_mac_dinh; }

Khi lệnh switch được chạy, biểu_thức được tính giá trị và so sánh với hằng_1. Nếu bằng nhau, chuỗi lệnh kể từ tập_lệnh_1 được thực thi cho đến khi gặp lệnh

break

đầu tiên, đến đây chương trình sẽ nhảy tới điểm kết thúc cấu trúc switch. Nếu biểu_thức không có giá trị bằng hằng_1, nó sẽ được so sánh với hằng_2, nếu bằng nhau, chương trình sẽ thực thi chuỗi lệnh kể từ tập_lệnh_2 tới khi gặp lệnh break đầu tiên thì nhảy tới cuối cấu trúc switch. Quy trình cứ tiếp diễn như vậy. Cuối cùng, nếu biểu_thức có giá trị khác với tất cả các giá trị đã được liệt kê (hằng_1, hằng_2, …), chương trình sẽ thực thi tập_lệnh_mặc_định nằm sau nhãn

default:

nếu như có nhãn này (không bắt buộc).

Ví dụ, lệnh sau so sánh giá trị của biến grade với các hằng kí tự ‘A’, ‘B’, ‘C’ và in ra các thông báo khác nhau cho từng trường hợp.

switch

(grade){

   

case

“A”

:

       

System.

out

.println(

“Grade = A”

);;

       

break

;

   

case

“B”

:

 

      

System.

out

.println(

“Grade = B”

);;

       

break

;

   

case

“C”

:

       

System.

out

.println(

“Grade = C”

);

       

break

;

   

default

:

       

System.

out

.println(

“Grade’s not A, B or C”

);; }

Nó tương đương với khối lệnh if-else lồng nhau sau:

if

(grade.equals(

"A"

)){

   

System.

out

.println(

"Grade = A"

);; }

else if

(grade.equals(

"B"

)){

   

System.

out

.println(

"Grade = B"

);; }

else if

(grade.equals(

"C"

)){

   

System.

out

.println(

"Grade = C"

); }

else

{

   

System.

out

.println(

"Grade's not A, B or C"

);; }

Lưu ý, các nhãn

case

trong cấu trúc switch phải là hằng chứ không thể là biến hay biểu thức. Nếu cần so sánh với biến hay biểu thức, ta nên dùng khối lệnh if-else lồng nhau.

Vấn đề đặc biệt của cấu trúc switch là các lệnh break. Nếu ta không tự gắn một lệnh break vào cuối chuỗi lệnh cần thực hiện cho mỗi trường hợp, chương trình sẽ chạy tiếp chuỗi lệnh của trường hợp sau chứ không tự động nhảy tới cuối cấu trúc switch. Ví dụ, đoạn chương trình sau sẽ chạy lệnh in thứ nhất nếu grade nhận một trong ba giá trị ‘A’, ‘B’, ‘C’ và chạy lệnh in thứ hai trong trường hợp còn lại:

switch

(grade){

   

case

"A"

:

   

case

"B"

:

   

case

"C"

:

       

System.

out

.println(

"Grade is A, B or C."

);

       

break

;

   

default

:

       

System.

out

.println(

"Grade is not A, B or C."

); }

Chương các thông báo khác nhau tùy theo xếp loại học lực (grade) mà người dùng nhập từ bàn phím. Trong đó, case ‘A’ kết thúc với break sau chỉ một lệnh, còn case ‘B’ chạy tiếp qua case ‘C’, ‘D’ rồi mới gặp break và thoát khỏi lệnh switch. Nhãn default được dùng để xử lý trường hợp biến grade giữ giá trị không hợp lệ đối với xếp loại học lực. Trong nhiều chương trình, phần default thường được dùng để xử lý các trường hợp không mong đợi, chẳng hạn như để bắt lỗi các kí hiệu học lực không hợp lệ mà người dùng có thể nhập sai.

Có một lưu ý nhỏ là Scanner không hỗ trợ việc đọc từng kí tự một. Do đó, để đọc giá trị của grade do người dùng nhập, ta dùng phương thức next() để đọc một chuỗi (không chứa kí tự trắng), rồi lấy kí tự đầu tiên bằng hàm charAt(0) (mà kiểu String cung cấp) làm giá trị của grade.

import

java.util.Scanner;

public class

SwitchExample {

   

public static void

main(String[] args) {

       

Scanner input =

new

Scanner(System.

in

);

  

     

String grade =

"F"

;

       

switch

(grade){

           

case

"A"

:

               

System.

out

.println(

"Excellent!"

);

               

break

;

           

case

"B"

:

               

System.

out

.println(

"Great!"

);

               

break

;

           

case

"C"

:

           

case

"D"

:

               

System.

out

.println(

"Well done!"

);

               

break

;

           

case

"F"

:

               

System.

out

.println(

"Excellent!"

);

               

break

;

           

default

:

               

System.

out

.println(

"Error! Invalid grade."

  

     

}

   

} }

);} }

Kết quả chạy chương trình:

Cấu Trúc Rẽ Nhánh Trong Python

If là gì? Có ăn được không?

If là một từ tiếng Anh thường gặp, khi dịch nó ra tiếng Việt ta sẽ được nghĩa là “Nếu” hoặc là “Giá mà”, “Miễn là”,… Dĩ nhiên là “Nếu” là một từ chẳng mấy xa lạ với các bạn. Chúng ta sử dụng nó cả trăm, ngàn lần một ngày.

Nếu hôm nay chủ nhật, Tèo sẽ đi chơi.

Nếu được vote up câu hỏi thì bạn được cộng điểm, còn nếu bị vote down bạn sẽ bị trừ điểm, không có vote thì số điểm không thay đổi.

If

Đây là ví dụ về câu lệnh if cơ bản nhất. Nếu … thì …

Từ đó, Python đã xây dựng một cấu trúc nếu tương tự như trên:

if expression:

# If-block

Lưu ý: Tất cả các câu lệnh nằm trong if-block là các câu lệnh có lề thụt vào trong so với câu lệnh if. Chi tiết Kteam sẽ trình bày ở phần tiếp theo

Ở đây, nếu expression là một giá trị khi đưa về kiểu dữ liệu Boolean là True thì Python sẽ nhảy vào thực hiện các câu lệnh trong if-block. Còn nếu không thì không thì sẽ bỏ qua if-block đó.

If – else if

Đây là bản nâng cấp của cấu trúc if vừa rồi chúng ta tìm hiểu. Nó có cấu trúc như sau:

if expression:

# If-block

elif 2-expression:

# 2-if-block

elif 3-expression:

# 3-if-block

elif n-expression:

# n-if-block

Ở đây, bạn có thể đặt bao nhiêu lần nếu cũng được. Và từ câu lệnh if đến lần elif lần thứ n – 1 (câu lệnh với n-expression) là một khối, ta sẽ đặt cho nó một cái tên là khối BIG để dễ hiểu. Nó sẽ hoạt động như sau:

Bước 1: Kiểm tra xem expression có phải là một giá trị Boolean True hay không?

Bước 2: Nếu có, thực hiện if-block sau đó kết thúc khối BIG. Không thì chuyển sang Bước 3.

Bước 3: Kiểu tra xem 2-expression có phải là một giá trị Boolean True hay không?

Bước 4: Nếu có, thực hiện 2-if-block sau đó kết thúc khối BIG. Không thì chuyển sang Bước 5.

Bước 5: Kiểm tra xem 3-expression có phải là một giá trị Boolean True hay không?

Bước 6: Nếu có, thực hiện 3-if-block sau đó kết thúc khối BIG. Không thì chuyển sang Bước 7

Bước (n – 1) x 2: Kiểm tra xem n-expression có phải là một giá trị Boolean True hay không?

Bước (n – 1) x 2 + 1: Nếu có, thực hiện n-if-block.

Bước (n – 1) x 2 + 2: Kết thúc khối BIG.

Ví dụ để các bạn dễ hiểu hơn

If – else

Cấu trúc vừa rồi không biết có làm bạn đau đầu hay không. Nếu có, hãy thư giãn vì cấu trúc sau đây đơn giản hơn nhiều.

if expression:

# If-block

else:

# else-block

Nếu expression là một giá trị Boolean True, thực hiện if-block và kết thúc. Không quan tâm đến else-block. Còn nếu không sẽ thực hiện else-block và kết thúc.

Ví dụ:

If – else if – else

if expression:

# If-block

elif 2-expression:

# 2-if-block

elif n-expression:

# n-if-block

else:

# else-block

Bạn có thể đặt bao nhiêu lần elif cũng được nhưng else thì chỉ một. Và từ câu lệnh if đến câu lệnh else là một khối, ta cũng sẽ đặt cho nó một cái tên là khối BIG để dễ hiểu. Nó sẽ hoạt động như sau:

Bước 1: Kiểm tra xem expression có phải là một giá trị Boolean True hay không?

Bước 2: Nếu có, thực hiện if-block sau đó kết thúc khối BIG. Không thì chuyển sang Bước 3.

Bước 3: Kiểu tra xem 2-expression có phải là một giá trị Boolean True hay không?

Bước 4: Nếu có, thực hiện 2-if-block sau đó kết thúc khối BIG. Không thì chuyển sang Bước 5

Bước (n – 1) x 2: Kiểm tra xem n-expression có phải là một giá trị Boolean True hay không?

Bước (n – 1) x 2 + 1: Nếu có, thực hiện n-if-block sau đó kết thúc khối BIG.

Bước (n – 1) x 2 + 2: Nếu không thì thực hiện else-block và kết thúc khối BIG.

Ví dụ:

Block trong Python

Với đa số ngôn ngữ lập trình hiện nay, thường dùng cặp dấu ngoặc { } để phân chia các block.

Riêng đối với Python lại sử dụng việc định dạng code để suy ra các block. Đây là điều giúp code Python luôn luôn phải đẹp mắt.

Một số điều lưu ý về việc định dạng code block trong Python:

Câu lệnh mở block kết thúc bằng dấu hai chấm (:), sau khi sử dụng câu lệnh có dấu hai chấm (:) buộc phải xuống dòng và lùi lề vào trong và có tối thiểu một câu lệnh để không bỏ trống block.

Những dòng code cùng lề thì là cùng một block.

Một block có thể có nhiều block khác.

Khi căn lề block không sử dụng cả tab lẫn space.

Nên sử dụng 4 space để căn lề một block

Các câu lệnh nằm trong một khung màu là một block, và block đó được mở bởi câu lệnh nằm ngay bên trên khung màu.

Lưu ý: Kteam có đề cập đến việc sau khi sử dụng câu lệnh có dấu hai chấm (:) buộc phải xuống dòng và lùi lề vào trong. Tuy nhiên, Bạn vẫn có thể đi ngược lại điều này trong một vài trường hợp

Tuy nhiên, việc sử dụng như vậy không được khuyến khích vì chỉ tiết kiếm được một vài dòng code mà lại gây khó đọc thì không đáng để tiết kiệm.

Và bạn cũng đã biết thêm một điều Python không hề cấm dấu chấm phẩy (;). Nó vẫn là một cú pháp hợp lệ. Nếu bạn quen tay có thể dùng dấu chấm phẩy (;) thoải mái.

Cấu Trúc Rẽ Nhánh Trong Java

Dẫn nhập

Sau khi tìm hiểu các khái niệm cơ bản về một ngôn ngữ lập trình. Bây giờ ta sẽ tìm hiểu điều cơ bản nhất trong lập trình là Cấu trúc rẽ nhánh .

Nội dung

Để đọc hiểu bài này, tốt nhất các bạn nên có kiến thức cơ bản về các phần sau:

Bài này chúng ta sẽ tìm hiểu những vấn đề sau:

Cấu trúc rẽ nhánh là gì? Phân loại

Cách sử dụng cấu trúc rẽ nhánh

Lời khuyên

Cấu trúc rẽ nhánh là gì? Phân loại

Trong lập trình, có những lúc ta cần phân chia các trường hợp và mỗi hoàn cảnh sẽ thực hiện những đoạn chương trình khác nhau. Như vậy dựa vào điều kiện ta sẽ rẽ nhánh cho chương trình chạy câu lệnh tương ứng.

Phân loại: Có 2 loại cấu trúc rẽ nhánh là dạng thiếu và dạng đủ

Dạng thiếu: Nếu biến age trên 18 thì ta sẽ in ra ‘Bạn đã đủ tuổi để đăng kí’.

Dạng đủ: Nếu biến age trên 18 thì ta sẽ in ra ‘Bạn đã đủ tuổi để đăng kí’, ngược lại thì in ra là ‘Bạn chưa đủ tuổi để đăng kí’

Cách sử dụng cấu trúc rẽ nhánh Cấu trúc rẽ nhánh dạng thiếu public class HelloWorld{ public static void main(String []args){ String s = "Kteam"; if (s == "Kteam") System.out.print("How Kteam"); } } Cấu trúc rẽ nhánh dạng đủ

Dạng đủ sẽ chia ra 2 loại: Gồm if..else.. và if..else if..else..

Dạng if..else.. Dạng chúng tôi if..else

Đây là dạng cấu trúc rẽ nhiều nhánh nếu ta muốn xét nhiều trường hợp để thực hiện rõ ràng hơn.

public class HelloWorld{ public static void main(String []args){ String job = "Sinh viên"; if (job == "Học sinh") System.out.print("Bạn còn lứa tuổi học sinh"); else if (job == "Sinh viên") System.out.print("Sinh viên có thể tham gia"); else System.out.print("Không rõ công việc của bạn"); } }

Lưu ý: Nếu câu lệnh thực hiện gồm nhiều câu lệnh thì ta phải để vào trong cặp { }

Lời khuyên

Có thể không cần thực hiện nhưng những lời khuyên sau đây gần như là " Luật bất thành văn " trong lập trình cấu trúc rẽ nhánh không riêng ngôn ngữ Java.

Luôn dùng cặp { } và thụt lề dòng code vào trong

Mặc dù cặp { } chỉ dùng cho nhóm câu lệnh, nhưng việc sử dụng { } sẽ giúp ta dễ sửa đổi trong trường hợp sau này tao muốn thêm câu lệnh khác. Ngoài ra, ta sử dụng thụt lề để dễ nhìn hơn.

Không nên đưa câu lệnh chúng tôi trong chúng tôi quá nhiều lần

Có những trường hợp các bạn viết như thế này

Việc đưa quá nhiều câu rẽ nhánh vào trong trong câu rẽ nhánh là điều tối kị trong lập trình. Nó giống như tạo nhiều đường mê cung vậy. Có những lúc bạn sẽ không rõ vì sao kết quả trả về như vậy. Đặc biệt là khi có bug phát sinh. Lời khuyên là bạn nên để 1-2 câu điều kiện bên trong là hợp lý.

Kết

Như vậy chúng ta đã tìm hiểu cấu trúc rẽ nhánh trong Java

Ở bài sau, Kteam sẽ giới thiệu đến bạn về VÒNG LẶP WHILE TRONG JAVA

Tải xuống Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Cấu trúc rẽ nhánh trong Java dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện chúng tôi để nhận được sự hỗ trợ từ cộng đồng.

Bài 9. Cấu Trúc Rẽ Nhánh

Ngày soạn 16/10/2023Tiết: 12 TÊN BÀI: Cấu trúc rẽ nhánhI-MỤC TIÊU CỦA BÀI DẠY 1. Kiến thức.-Nắm được khái niệm rẽ nhánh dạng thiếu và đủ-Nắm được câu lệnh If – then dạng thiếu và đủ -Nắm được cú pháp câu lệnh ghép2. Kỹ năng.-Mô phỏng được lược đồ rẽ nhánh dạng thiếu và đủ3. Thái độ: Nghiêm túc trong học tập để biết cách sử dụng câu lệnh If- then, câu lệnh ghép4. Đinh hướng phát triển năng lực : Năng lực tự học, năng lực hợp tác, năng lực giao tiếp, năng lực quan sát, năng lực phát hiện và giải quyết vấn đề, năng lực tính toán, năng lực vận dụng kiến thức vào cuộc sống II. CHUẨN BỊ CỦA GIÁO VIÊN VÀ HỌC SINH1-Giáo viên: SGK, SGV, giáo án,2-Học sinh:SGK, vở ghi.III. PHƯƠNG PHÁP, KỸ THUẬT DẠY HỌC1-Phương pháp: Thuyết trình, vấn đáp2- Kỹ thuật dạy học XYZ, ổ bi, bể cáIV.TIẾN TRÌNH BÀI DẠY ( TỔ CHỨC CÁC HOẠT ĐỘNG ) *Ổn định lớp: Kiểm tra sĩ số, nội vụ lớp họcLớp11A611A7

Ngày giảng:

A. Hoạt động khởi động1- Kiểm tra bài cũ: Không kiểm tra bài cũ mà kết hợp trong bài mới2-Tạo tình huống ( vào bài mới )Hôm nay chúng ta học sang chương mới, Chương III Cấu trúc rẽ nhánh và lặp. Bài hôm nay là bài 9. Cấu trúc rẽ nhánhB.Hoạt động hình thành kiến thức

MỤC TIÊU( Hoặc ghi cả Nội dung là do từng GV)HOẠT ĐỘNG CỦA GVHOẠT ĐỘNG CỦA HỌC SINH

Hoạt động 1: Rẽ nhánh

Thường ngày, có rất nhiều việc chỉ được thực hiện khi một điều kiện cụ thể nào đó được thoả mãn. Ví dụ, Châu và Ngọc thường cùng nhau chuẩn bị các bài thực hành môn tin học.Một lần Châu hẹn với Ngọc: Chiều mai nếu trời không mưa thì Châu sẽ đến nhà Ngọc .Ta gọi cách diễn đạt đó là dạng thiếu:Nếu … thì ….Một lân khác, Ngọc hẹn với Châu: Chiều mai nếu trời không mưa thì Ngọc sẽ đến nhà Châu, nếu mưa thì sẽ gọi điện cho Châu để trao đổi.Ta nói cách diễn đạt đó thuộc dạng đủ:Nếu …. thì …, nếu không thì …GV: Theo em hiểu rẽ nhánh là gì ?

Từ đó có thể thấy, trong nhiều thuật toán, các thao tác tiếp theo sẽ phụ thuộc vào kết quả nhận được từ các bước trước đó.Ví dụ, để giải phương trình bậc hai:ax2+ bx + c (a≠0)Trước tiên, ta tính biệt số deltaD = b2 – 4ac.Nếu D không âm, ta sẽ đưa ra các nghiệm.Trong trường hợp ngược lại ta phải thông báo phương trình vô nghiệm.

Hs: Rẽ nhánh giống như đi đến ngã ba hoặc ngã tư đường rồi rẽ theo một hướng (nhánh) nào đó.

Lắng nghe, ghi chép

Hoạt động 2: Câu lệnh If – then