Java - Lớp Numbers

Xin chào, các nhà lập trình Java mới nhất! Hôm nay, chúng ta sẽ bơi lội vào thế giới thú vị của các số trong Java. Đừng lo nếu bạn mới bắt đầu học lập trình; chúng ta sẽ bắt đầu từ những khái niệm cơ bản và dần dần đi lên. Cuối tutorial này, bạn sẽ trở thành một chuyên gia xử lý số như một pro!

Java - Number

Giới thiệu về Lớp Numbers trong Java

Trong Java, các số không chỉ là các giá trị đơn giản; chúng là các đối tượng với những siêu năng! Java cung cấp một số lớp để xử lý các loại số khác nhau. Các lớp này là một phần của gói java.lang, được tự động nhập vào mỗi chương trình Java.

Hệ thống Phân hóa của Lớp Number

Hãy bắt đầu bằng cách nhìn tổng quát về hệ thống phân hóa của lớp Number:

Number (trừu tượng)
|
+-------+-------+
|       |       |
Integer  Float  Double
|
Byte

Lớp Number là lớp cha của tất cả các lớp bọc số. Nó là trừu tượng, có nghĩa là bạn không thể tạo một đối tượng Number trực tiếp, nhưng bạn có thể sử dụng các lớp con của nó.

Các Lớp Bọc (Wrapper Classes)

Java cung cấp các lớp bọc cho mỗi loại số nguyên. Các lớp này "bọc" các giá trị nguyên thủy trong các đối tượng, mang lại thêm các chức năng bổ sung. Dưới đây là bảng các lớp bọc số thường được sử dụng:

Loại Nguyên Thủy Lớp Bọc
byte Byte
short Short
int Integer
long Long
float Float
double Double

Tạo Các Đối Tượng Số

Hãy tạo một số đối tượng số và xem chúng hoạt động như thế nào:

Integer intObj = new Integer(42);
Double doubleObj = new Double(3.14159);
Float floatObj = new Float(2.5f);

Trong ví dụ này, chúng ta đang tạo các đối tượng của các loại số khác nhau. Nhận thấy rồi sao chúng ta sử dụng từ khóa new theo sau là hàm khởi tạo của lớp bọc.

Nhưng chờ đã, có một cách dễ dàng hơn! Java cung cấp tính năng tự đóng gói, tự động chuyển đổi các nguyên thủy thành các đối tượng bọc của chúng:

Integer intObj = 42;
Double doubleObj = 3.14159;
Float floatObj = 2.5f;

Điều này có tệ không? Java sẽ tự đóng gói cho chúng ta ẩn dưới sự kiện!

Các Phương Thức Số Thông Dụng

Bây giờ khi đã có các đối tượng số của mình, hãy khám phá một số phương thức hữu ích mà chúng cung cấp:

1. valueOf()

Phương thức valueOf() là một cách tiện lợi để tạo các đối tượng số:

Integer intObj = Integer.valueOf(42);
Double doubleObj = Double.valueOf("3.14159");

Phương thức này thường được ưa chuộng hơn việc sử dụng các hàm khởi tạo vì nó có thể tái sử dụng các đối tượng đã lưu trữ trong bộ nhớ cache cho hiệu suất tốt hơn.

2. xxxValue()

Các phương thức này chuyển đổi đối tượng số thành loại nguyên thủy của nó:

Integer intObj = 42;
int intValue = intObj.intValue();
double doubleValue = intObj.doubleValue();

Ở đây, intValue() trả về giá trị int, trong khi doubleValue() chuyển đổi nó thành double.

3. compareTo()

Phương thức này so sánh hai đối tượng số:

Integer num1 = 42;
Integer num2 = 100;
int result = num1.compareTo(num2);
System.out.println(result); // Xuất: -1

Phương thức compareTo() trả về:

  • Một giá trị âm nếu số đầu tiên nhỏ hơn số thứ hai
  • Zero nếu chúng bằng nhau
  • Một giá trị dương nếu số đầu tiên lớn hơn số thứ hai

4. equals()

Phương thức này kiểm tra xem hai đối tượng số có bằng nhau hay không:

Integer num1 = 42;
Integer num2 = 42;
boolean areEqual = num1.equals(num2);
System.out.println(areEqual); // Xuất: true

Nhớ rồi, equals() so sánh giá trị, không phải là tham chiếu đối tượng!

Vui vẻ với Số: Một Dự Án Nhỏ

Hãy đặt kiến thức mới của chúng ta vào sử dụng với một dự án nhỏ. Chúng ta sẽ tạo một trò chơi đoán số đơn giản:

import java.util.Random;
import java.util.Scanner;

public class NumberGuessingGame {
public static void main(String[] args) {
Random random = new Random();
Integer secretNumber = random.nextInt(100) + 1;
Scanner scanner = new Scanner(System.in);
Integer guess;
int attempts = 0;

System.out.println("Chào mừng bạn đến với Trò chơi Đoán Số!");
System.out.println("Tôi đang suy nghĩ về một số từ 1 đến 100.");

do {
System.out.print("Nhập đoán của bạn: ");
guess = scanner.nextInt();
attempts++;

if (guess.compareTo(secretNumber) < 0) {
System.out.println("Quá thấp! Thử lại.");
} else if (guess.compareTo(secretNumber) > 0) {
System.out.println("Quá cao! Thử lại.");
} else {
System.out.println("Chúc mừng! Bạn đã đoán đúng số trong " + attempts + " lần thử!");
}
} while (!guess.equals(secretNumber));

scanner.close();
}
}

Hãy phân tích xem có gì xảy ra trong mã này:

  1. Chúng ta tạo một đối tượng Random để tạo một số ngẫu nhiên từ 1 đến 100.
  2. Chúng ta sử dụng một Scanner để đọc đầu vào của người dùng.
  3. Chúng ta sử dụng một vòng lặp do-while để liên tục yêu cầu đoán số cho đến khi đoán đúng số.
  4. Chúng ta sử dụng compareTo() để kiểm tra xem đoán có quá thấp hay quá cao.
  5. Chúng ta sử dụng equals() để kiểm tra xem đoán có đúng hay không.

Trò chơi này minh họa cách chúng ta có thể sử dụng các đối tượng số và các phương thức của chúng trong một ứng dụng thực tế. Nó không chỉ là về việc lưu trữ số mà còn về việc thao tác và so sánh chúng một cách có ý nghĩa.

Kết Luận

Chúng ta chỉ chạm vào mặt bên ngoài của những gì các lớp Number trong Java có thể làm. Khi bạn tiếp tục hành trình với Java, bạn sẽ khám phá thêm các tính năng và phương thức mạnh mẽ. Nhớ rồi, luyện tập sẽ làm cho bạn hoàn hảo, vì vậy đừng ngần ngại thử nghiệm các khái niệm này trong dự án của riêng bạn.

Tiếp tục mã hóa, tiếp tục học hỏi, và nhất quan trọng là, hãy vui vẻ với các số Java!

Credits: Image by storyset