TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Các toán tử thường dùng trong Java

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.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Toán tử gán.

Toán tử Mô tả Ví dụ
= Gán giá trị từ các toán hạng bên phải cho toán hạng bên trái. a = 1 sẽ gán giá trị 1 cho a.
+= Cộng hoặc nối chuỗi toán hạng bên phải vào toán hạng bên trái và gán lại kết quả cho toán hạng bên trái. a += 1 (tương đương với a = a + 1).
-= Trừ toán hạng bên phải khỏi toán hạng trái và gán lại kết quả cho toán hạng bên trái. a -=1 (tương đương với a = a - 1).
*= Nhân toán hạng bên phải với toán hạng bên trái và gán lại kết quả cho toán hạng bên trái. a *= 2 (tương đương với a = a * 2).
/= Chia toán hạng bên phải cho toán hạng bên trái và gán lại kết quả cho toán hạng bên trái. a /= 2 (tương đương với a = a / 2).
%= Chia toán hạng bên phải cho toán hạng bên trái và lấy phần dư gán cho toán hạng bên trái. a %= 2 (tương đương với a = a % 2).

Toán tử số học.

Toán tử Mô tả
+ Toán tử cộng.
- Toán tử trừ.
* Toán tử nhân.
/ Toán tử chia.
% Toán tử chia lấy phần dư.

Toán tử 1 ngôi.

Toán tử Mô tả
+ Chỉ định giá trị không âm.
- Chỉ định giá trị âm.
++ Tăng giá trị của toán hạng đó lên 1 đơn vị.
-- Giảm giá trị của toán hạng đó đi 1 đơn vị.
! Phép toán phủ định trên một giá trị luận lý. Nếu một điều kiện đang nhận giá trị là true thì toán tử này sẽ thay đổi giá trị đó thành false và ngược lạ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:

Bước thực hiện Kết quả
Bước 1: Xử lý Prefix trước: Chúng ta nhận thấy trong đoạn chương trình trên có ++secondVariable là Prefix nên chúng ta xử lý trước. ++secondVariable = 7+ 1 = 8.
Bước 2: Xử lý các phép toán còn lại. 5 + 8 - 8 = 5.
Bước 3: Gán kết quả vừa có cho toán hạng bên trái. result = 5
Bước 4: Xử lý Postfix. firstVariable++ = 5 + 1= 6.

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

Toán tử so sánh.

Toán tử Mô tả
== (So sánh bằng) So sánh giá trị của toán hạng bên trái và toán hạng bên phải có bằng nhau hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
!= (So sánh không bằng) So sánh giá trị của toán hạng bên trái và toán hạng bên phải có không bằng nhau hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
> (So sánh lớn hơn). So sánh giá trị của toán hạng bên trái có lớn hơn toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
>= (So sánh lớn hơn hoặc bằng) So sánh giá trị của toán hạng bên trái có lớn hơn hoặc bằng toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
< (So sánh nhỏ hơn) So sánh giá trị của toán hạng bên trái có nhỏ hơn toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
<= (So sánh nhỏ hơn hoặc bằng) So sánh giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.

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.

Toán tử Mô tả
&& Phép toán luận lý VÀ (AND) trên 2 giá trị, Kết quả trả về true khi cả hai đều đúng.
|| Phép toán luận lý HOẶC (OR) trên 2 giá trị. Kết quả trả về false khi cả hai đều sai.
?: Toán tử điều kiện 3 ngôi.

Đ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ử.

Thứ tự Toán tử
1 Các toán tử 1 ngôi: +-++--
2 Các toán tử số học: */+-
3 Các toán tử: ><>=<===!=
4 Các toán tử luận lý điều kiện: &&||?:
5 Các toán tử gán: =*=, /=+=, -=

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é!

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top