Bài 3.3. Toán tử ba ngôi
Nội dung bài học
Cấu trúc tổng quát
- Toán tử ba ngôi, hay còn có tên là conditional operator, ternary operator.
- Sau đây là cấu trúc tổng quát của toán tử ba ngôi:
variable = (expression) ? value1: value2;
- Trong đó:
- variable là biến nào đó cần gán giá trị.
- expression là một biểu thức nào đó có tính đúng sai. Từ việc xét tính chất đúng sai của biểu thức này sẽ quyết định giá trị được gán cho biến.
- Nếu giá trị trong expression là true thì value1 sẽ được gán cho biến variable.
- Ngược lại, value2 sẽ được gán cho biến variable.
- Khi sử dụng cú pháp trên để in ra màn hình hoặc làm giá trị trả về từ một phương thức, thì ta bỏ cụm cú pháp từ dấu bằng trở về trước.
Mục đích sử dụng
- Mục đích sử dụng của toán tử ba ngôi đó là làm cho câu lệnh điều kiện ngắn gọn lại trên 1 dòng.
- Thường áp dụng khi các điều kiện đơn giản hoặc làm giá trị trả về của hàm tác vụ đơn giản.
- Có thể sử dụng thay thế cho cấu trúc if-else.
- Tuy nhiên việc sử dụng cấu trúc if-else hoặc toán tử ba ngôi là do bạn quyết định. Không bắt buộc.
Ví dụ minh họa
- Ví dụ sau sẽ minh họa cú pháp sử dụng toán tử ba ngôi và cấu trúc if-else tương ứng.
- Dùng if-else:
int n = 200;
var result = "";
if(n % 2 == 0) {
result = "n là số chẵn";
} else {
result = "n là số lẻ";
}
System.out.println(result);
- Ví dụ 1: đoạn code trên khi dùng toán tử ba ngôi:
int n = 200;
var result = (n % 2 == 0) ? "n là số chẵn" : "n là số lẻ";
System.out.println(result);
- Ta cũng có thể lồng luôn vào phương thức println() như sau:
int n = 200;
System.out.println((n % 2 == 0) ? "n là số chẵn" : "n là số lẻ");
- Bạn đã thấy sự bá đạo của toán tử ba ngôi chưa?
- Ví dụ 2: kiểm tra và trả về giá trị n chẵn hay lẻ
public static boolean isEven(int n) {
return (n % 2 == 0) ? true : false;
}
- Tương đương với:
public static boolean isEven(int n) {
return (n % 2 == 0);
}
- Mở rộng: ta có thể sử dụng toán tử ba ngôi thay cho if-else-if.
- Ví dụ 3: kiểm tra số đặc biệt. Số đặc biệt là số nguyên chia hết cho 2 hoặc 3 hoặc 5.
import java.util.Scanner;
public class Lesson33 {
public static void main(String[] args) {
var scanner = new Scanner(System.in);
var number = scanner.nextInt();
var result = isSpecialNumber(number);
System.out.println(STR."{number} is special number? {result}");
}
private static boolean isSpecialNumber(int number) {
return (number % 2 == 0) ? true
: (number % 3 == 0) ? true
: number % 5 == 0 ? true : false;
}
}
- Phuong thức isSpecial() trên tương đương với:
public static boolean isSpecialNumber(int n) {
if(n % 2 == 0){
return true;
} else if(n % 3 == 0) {
return true;
} else if(n % 5 == 0) {
return true;
}
return false;
}
- Ví dụ 4: xét mức học bổng nhận được theo điểm gpa hệ 4.
- Nếu gpa >= 3.6 thì được học bổng loại khá, trị giá 10 củ.
- Nếu gpa >= 3.2 thì được học bổng loại giỏi trị giá 5 củ.
- Nếu gpa >= 3.0 thì được học bổng trị giá 3.5 củ.
- Code triển khai:
import java.text.DecimalFormat;
import java.util.Scanner;
public class Lesson33 {
public static void main(String[] args) {
var scanner = new Scanner(System.in);
System.out.print("Your gpa: ");
var gpa = scanner.nextFloat();
var scholarship = (gpa < 3.0f || gpa > 4.0f) ? 0
: (gpa >= 3.6f) ? 10_000_000
: (gpa >= 3.2f) ? 5_000_000
: 3_500_000;
var numberFormat = new DecimalFormat("#,###");
var result = numberFormat.format(scholarship);
System.out.println(STR."Scholarship amount = {result}đ");
}
}
Your gpa: 3.69
Scholarship amount = 10,000,000đ
=====
Your gpa: 3.33
Scholarship amount = 5,000,000đ
=====
Your gpa: 3.14
Scholarship amount = 3,500,000đ
=====
Your gpa: 2.35
Scholarship amount = 0đ
=====
Your gpa: 4.63
Scholarship amount = 0đ
Bài tập thực hành
- Đề bài đầy đủ: nhấn vào đây
- Lời giải mẫu: nhấn vào đây

