Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 7: Câu lệnh điều kiện trong Java

Trong một chương trình đôi khi chúng ta sẽ cần đến những điều kiện, để thực thi những hành động tương tự với điều kiện đó. Cái này trong lập trình thường được gọi là câu lệnh điều kiện hay câu lệnh rẽ nhánh.

Trong Java chúng ta có thể implement câu lệnh điều kiện qua 2 cách chính đó là sử dụng if-elseswitch-case.

1. Câu lệnh if else.

Đây là khối lệnh cơ bản nhất trong lập trình nói chung và Java nói chung.

Câu lệnh if.

- Đây là câu lệnh cơ bản nhất trong số các câu lệnh điều kiện. Các câu lệnh bên trong scope của if sẽ được thực thi nếu như điều kiện bên trong if trả về true

Cú pháp:

if (dieu_kien) {
   // code
}

Trong đó: dieu_kien chứa các biểu thức toán học. Và nếu các biểu thức trong dieu_kien trả về true thì đoạn code bên trong scope của if sẽ được thực thi.

VD

int number = 10;

if (number <= 10) {
  System.out.printf("number nho hon bang %d", number);
}

// ouput: number nho hon bang 10

Trong đoạn code trên vì biến number nhỏ hơn bằng 10 là true nên đoạn code bên trong scope if sẽ được thực thi.

Câu lệnh if-else.

- Câu lệnh này được mở rộng từ cậu lệnh if. Nghĩa là, nếu dieu_kien của if trả về false thì nó sẽ nhảy vào else.

Cú pháp:

if (dieu_kien) {
  // code
} else {
  // code
}

Trong đó: nếu dieu_kien của if trả về false thì chương trình sẽ không thực thi đoạn code bê trong scope của if, mà thay vào đó sẽ thực thi code bên trong scope của else.

VD: Cũng với ví dụ trên nhưng mình sẽ set number bằng 11 và thêm else vào.

int number = 11;

if (number <= 10) {
  System.out.printf("number nho hon bang %d", number);
} else {
  System.out.println("number lon hon 10");
}

// output: number lon hon 10

Trong trường hợp các bạn có nhiều hơn 2 điều kiện thì có thể sử dụng else if nhiều lần để xử lí các điều kiện tiếp theo trước khi xử lí else.

VD: Mình có đoạn code check xem điểm số thuộc loại nào. Nếu nhỏ hơn 5 điểm thì là "dưới trung bình", lớn hơn 5 và nhỏ hơn 6.5 điểm thì là "tren trung binh", lớn hơn 6.5 và nhỏ hơn bằng 8.5 thì là "Khá", còn lại sẽ là "Giỏi"

float point = 7;

if (point < 5) {
  System.out.println("duoi trung binh");
} else if (point >= 5 && point < 6.5) {
  System.out.println("Tren trung binh");
} else if (point >= 6.5 && point <= 8.5) {
  System.out.println("Kha");
} else {
  System.out.println("Gioi");
}

// Output: Kha

Câu lệnh if-else lồng nhau.

- Trong nhiều trường hợp, bạn muốn thực hiện nhiều điều kiện lồng nhau trong chương trình thì bạn hoàn toàn có thể. Số lượng cấp lồng nhau là vô hạn, nhưng bạn không nên lồng quá nhiều điều kiện vì như thế code sẽ rất khó đọc và maintaince sau này.

VD:

int number = 7;

if (number <= 10) {
  if (number % 2 == 0) {
    System.out.println("So chan");
  } else {
    System.out.println("So le");
  }
} else {
  System.out.println("So lon hon 10");
}

2. Câu lệnh switch-case.

Về mặt chức năng thì câu lệnh switch-case cũng có chức năng tương tự như câu lệnh if-else. Tuy nhiên switch-case chỉ kiểm tra sẽ xem 1 biến có bằng với giá trị nào đó hay không thôi, chứ không thể kiểm tra được nhiều điều kiện như if. Vì thế nên switch chỉ work đối với một số kiểu dữ liệu nguyên thủy như char, byte, shortint. Ngoài ra nó cũng hoạt động với enum, String và một vài class wraper của các kiểu dữ liệu nguyên thủy như: CharacterByteShort, and Integer.

Cú pháp:

switch (variable) {
  case condition1:
    //code
    break;
  case condition2:
    //code
    break;
  ...
  ...
  case conditionN:
    //code
    break;
  default:
    //code
    break;
}

Trong đó:

  • variable là biến cần kiểm tra.
  • condition1, condition2,... conditionN là các điều kiện. Nếu điều kiện nào match thì code bên trong case đó sẽ được thực thi.
  • default là block chứa đoạn code sẽ được thực thi nếu như không có case nào match (gần giống với else). Đây là block optional, trong một switch-case có thể có hoặc không có block này.

VD: Mình sẽ kiểm tra number mà bằng 10 thì in ra "xuất sắc", còn lại in ra "chưa xuất sắc"

int number = 9;

switch(number){
  case 10:
    System.out.println("Xuat sac");
    break;
  default:
    System.out.println("Co gang");
    break;
}

// output: Co gang

Nếu như bạn muốn gom nhóm case để cùng xử lí một đoạn code thì bạn có thể bỏ keywork break ở những case phía trên đi, và chỉ để lại ở case cuối cùng có điều kiện thuộc nhóm đó. Vì keywork break có tác dụng phá vỡ một vòng lặp hay một switch-case, tất cả các đoạn code nằm sau break và trong một block scope (trong cặp dấu "{}") sẽ không được thực thi.

VD:

int number = 3;

switch(number){
  case 1:
  case 2:
  case 3:
  case 4:
    System.out.println("Nho hon 5");
    break;
  default:
    System.out.println("Lon hon 5");
    break;
}

// output: Nho hon 5

Trong ví dụ trên vì case 1,2,3 không được break nên switch sẽ tiếp tục thực thi các case phía sau, cho đến khi nó gặp break ở case số 4.

Bạn cũng có thể lồng các switch case với nhau, hoặc switch-case lồng if-else và ngược lại được.

VD: Chương trình tính số ngày trong tháng.

int month = 2;
int year = 2020;
int numDays = 0;

switch (month) {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
    numDays = 31;
    break;
  case 4:
  case 6:
  case 9:
  case 11:
    numDays = 30;
    break;
  case 2:
    if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0)) {
      numDays = 29;
    } else {
      numDays = 28;
    }
    break;
  default:
    System.out.println("Invalid month.");
    break;
}
System.out.println("Number of Days = " + numDays);

// output: Number of Days = 29

3. Khi nào nên dùng if-else, switch-case.

Chức năng của 2 câu lệnh trên là giống nhau, nên chắc cũng sẽ có nhiều bạn thường sẽ thắc mắc là khi nào nên sử dụng if-else, khi nào sử dụng switch-case. Mình sẽ liệt kê một số rule theo quan điểm của mình về việc khi nào nên sử dụng if-else, khi nào sử dụng switch case như sau:

  • Khi điều kiện cần check là đơn giản và  có nhiều hơn 3 trường hợp. Sử dụng switch-case.
  • Khi điều kiện cần check phức tạp Sử dụng if-else.
  • Khi điều kiện cần check không phải là kiểu so sánh bằng. Sử dụng if-else.
Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

1 Comments

Cảm ơn a!

CườngNT

1 năm trước

Bình luận

Captcha