06/04/2021, 14:47

Các toán tử thường dùng trong Java - Học Java core - từ cơ bản đến nâng cao

Trong bài ngày hôm nay, tôi sẽ giới thiệu đến các bạn các toán tử cơ bản (Basic Operators) trong Java. Sau đó, tôi sẽ đưa ra một ví dụ tổng hợp những gì chúng ta học từ đầu series tới giờ và có sử dụng các loại toán tử này. Trong phần bài tập, tôi cũng sẽ đưa ra một số dạng bài tập cho các bạn ...

Trong bài ngày hôm nay, tôi sẽ giới thiệu đến các bạn các toán tử cơ bản (Basic Operators) trong Java. Sau đó, tôi sẽ đưa ra một ví dụ tổng hợp những gì chúng ta học từ đầu series tới giờ và có sử dụng các loại toán tử này. Trong phần bài tập, tôi cũng sẽ đưa ra một số dạng bài tập cho các bạn tham khảo.

1. Các toán tử cơ bản (Basic Operators) trong Java.

Trong Java, chúng ta thường gặp các loại toán tử sau: Toán tử gán, toán tử số học, toán tử một ngôi, toán tử so sánh, toán tử luận lý điều kiện và cuối cùng tôi sẽ giới thiệu đến các bạn độ ưu tiên giữa các toán tử trong Java.

Toán tử gán.

Toán tử số học.

Toán tử 1 ngôi.

Đối với toán tử ++ và -- thì trong Java có 2 loại đó là Prefix (tiền tố) và Postfix (hậu tố).

  • Đối với Prefix thì toán tử ++ hoặc -- sẽ nằm đằng sau toán hạng đó. Ví dụ: a++ hoặc a--.
  • Đối với Postfix thì toán tử ++ hoặc -- sẽ đứng đằng trước toán hạng đó. Ví dụ: ++a hoặc --a.

Vậy sự khác nhau giữa Prefix và Postfix là gì? Câu trả lời là nếu như toán hạng (biến) đó chỉ đứng một mình (ví dụ a++ hoặc a--) thì Postfix hay Prefix là giống nhau nhưng trường hợp đó rất ít khi xảy ra, bởi vì đối với những chương trình lớn và có tính phức tạp thì chúng ta thường phải giải quyết những biểu thức tổng hợp của nhiều toán tử. Vậy giả sử khi gặp những biểu thức tổng hợp này thì chúng ta phải giải quyết như thế nào? Tôi sẽ hướng dẫn các bạn trong ví dụ dưới đây:

Giả sử chúng ta có đoạn chương trình như sau:

Ví dụ
package toan_tu;

public class PostfixPrefix {

	public static void main(String[] args) {
		int firstVariable = 5, secondVariable = 7;
		int result = firstVariable++ + ++secondVariable - 8;
		System.out.println("First variable = " + firstVariable);
		System.out.println("Second variable = " + secondVariable);
		System.out.println("Third variable = " + result);
	}

}

Theo bạn, sau khi biên dịch đoạn chương trình thì giá trị của mỗi biến bằng bao nhiêu?

Khi gặp 1 vấn đề như vậy thì chúng ta thực hiện theo các bước như sau:

Bước 1: Ưu tiên xử lý Prefix trước.

Bước 2: Xử lý các phép toán còn lại.

Bước 3: Gán giá trị cho toán hạng nằm bên trái dấu bằng trước.

Bước 4: Xử lý Postfix.

Dựa theo các bước trên, chúng ta giải bài toán trên như sau:

Kết quả cuối cùng là: firstVariable = 6, secondVariable = 8, result = 5.

Toán tử so sánh.

Sau đâu tôi sẽ đưa ra ví dụ minh họa toán tử so sánh.

Ví dụ
package toan_tu;

import java.util.Scanner;

public class ToanTuSoSanh {
	public static void main(String[] args) {
		int firstVariable, secondVariable;
		Scanner scanner = new Scanner(System.in);
		System.out.println("Nhập vào số thứ nhất: ");
		firstVariable = scanner.nextInt();
		System.out.println("Nhập vào số thứ hai: ");
		secondVariable = scanner.nextInt();
		System.out.println("Kết quả của so sánh bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable == secondVariable));
		System.out.println("Kết quả của so sánh không bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable != secondVariable));
		System.out.println("Kết quả của so sánh lớn hơn " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable > secondVariable));
		System.out.println("Kết quả của so sánh lớn hơn hoặc bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable >= secondVariable));
		System.out.println("Kết quả của so sánh nhỏ hơn " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable < secondVariable));
		System.out.println("Kết quả của so sánh nhỏ hơn hoặc bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable <= secondVariable));
	}
}
Kết quả của ví dụ trên như sau:

ketqua toantusosanh PNG

Toán tử luận lý điều kiện.

Đoạn chương trình dưới đây sẽ giúp các bạn hiểu rõ hơn về toán tử luận lý điều kiện.

Ví dụ
package toan_tu;

import java.util.Scanner;

public class ToanTuLuanLyDieuKien {
	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();
		
		// Sử dụng toán tử luận lý điều kiện
		System.out.println("Kết quả của (firstNumber < 10) && (secondNumber < 10) là " +
				 ((firstNumber < 10) && (secondNumber < 10)));	// Toán tử AND
		System.out.println("Kết quả của (firstNumber < 10) || (secondNumber < 10) là " + 
				 ((firstNumber < 10) || (secondNumber < 10)));	// Toán tử OR
	}

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

ketqua toantuluanlydieukien PNG

Giải thích chương trình:

Khi biên dịch chương trình, tôi sẽ nhập vào firstNumber = 8 secondNumber = 12.

Bước 1: Trong toán tử AND các bạn nhận thấy tôi so sánh 2 số vừa nhập với 10, vì số thứ nhất = 8 nhỏ hơn 10 là đúng và số thứ hai = 12 nhỏ hơn 10 là sai và theo mô tả của toán tử AND thì biểu thức sẽ trả về kết quả đúng ⇔ cả hai biểu thức con đều đúng mà trong ví dụ này chỉ có 1 biểu thức con đúng nên trình biên dịch sẽ trả về kết quả là false.

Bước 2: Tương tự, trong toán tử OR các bạn nhận thấy 8 nhỏ hơn 10 là đúng và 12 nhỏ hơn 10 là sai và theo mô tả của toán tử OR thì biểu thức sẽ trả về kết quả sai ⇔ cả hai biểu thức con đều sai, nhưng trong trường hợp này chỉ có 1 biểu thức con sai nên kết quả của chương trình vẫn là true.

Độ ưu tiên giữa các toán tử.

Trong một số trường hợp, chúng ta nên dùng dấu ngoặc tròn để nhóm các biểu thức lại để quy định độ ưu tiên giữa các toán tử. Dấu ngoặc tròn làm cho biểu thức rõ ràng, rõ nghĩa hơn và tránh được những sai sót trong quá trình thực thi biểu thức.

2. Ví dụ tổng hợp.

Viết chương trình tính thể tích và diện tích bề mặt của một hình cầu với bán kính r nhập vào từ bàn phím (r > 0). Kết quả chỉ cần lấy 2 chữ số thập phân. Công thức tính như sau:

Thể tích = (4/3) * PI * r3.

Diện tích bề mặt = 4 * PI * r2.

Hướng dẫn: Để làm tròn kết quả với 2 chữ số thập phân các bạn sử dụng lớp DecimalFormat theo cú pháp như sau: DecimalFormat decimalFormat = new DecimalFormat("#.##") với phần sau dấu chấm tương ứng với số chữ số thập phân cần lấy (ở đây chúng ta cần lấy 2 chữ số thập phân nên sẽ sử dụng 2 dấu ##).

Bài giải
package toan_tu;

import java.text.DecimalFormat;
import java.util.Scanner;

public class TinhDienTichVaTheTichHinhCau {
	public static final float PI = 3.14f;	// khai báo hằng số
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		// Khai báo lớp DecimalFormat dùng để định dạng số
		DecimalFormat decimalFormat = new DecimalFormat("#.##");
		
		System.out.println("Nhập vào bán kính hình cầu (r > 0): ");
		float radius = scanner.nextFloat();
		
		// Tính diện tích bề mặt hình cầu
		float area = 4 * PI * radius * radius;
		System.out.println("Diện tích hình cầu = " + decimalFormat.format(area));
		
		/*
		 *  Tính thể tích hình cầu
		 *  Lưu ý phải ép kiểu kết quả của 4/3 về số thực nếu không sẽ dẫn đến sai kết quả
		 */
		float vol = (float)4/3 * PI * radius * radius * radius;
		System.out.println("Thể tích hình cầu = " + decimalFormat.format(vol));
	}

}

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

ketqua tinhdientichthetichhinhcau PNG

3. Lời kết.

Đây là bài cuối cùng trong chương Tổng quan về Java. Trong chương này, chúng ta đã tìm hiểu tổng quan về Java, các thế mạnh đặc trưng của Java, các kiểu dữ liệu, cách khai báo biến và đặc biệt các toán tử thường dùng trong Java. Chương tiếp theo - chương Cấu trúc điều khiển sẽ giới thiệu các cấu trúc điều khiển và cách thức hoạt động và mục đích của nó trong các chương trình Java. Các bạn cố gắng theo dõi nhé!

Bùi Văn Nam

27 chủ đề

7090 bài viết

Cùng chủ đề
0