Xem thêm

Sức mạnh của số ngẫu nhiên trong Java

Huy Erick
Số ngẫu nhiên - Bí mật đằng sau sự ngẫu nhiên Đôi khi, khi làm việc với lập trình, chúng ta gặp phải các tình huống đòi hỏi sự ngẫu nhiên, chẳng hạn như: "chọn...

Số ngẫu nhiên - Bí mật đằng sau sự ngẫu nhiên

Đôi khi, khi làm việc với lập trình, chúng ta gặp phải các tình huống đòi hỏi sự ngẫu nhiên, chẳng hạn như: "chọn một bộ phim ngẫu nhiên từ danh sách", "chọn người trúng số", "xáo trộn danh sách phát của người dùng khi họ lắc điện thoại thông minh của mình", "chọn một số ngẫu nhiên để mã hóa tin nhắn", và nhiều tình huống khác. Trong mỗi trường hợp này, ta đặt ra câu hỏi: "Làm thế nào để lấy một số ngẫu nhiên?"

Tuy nhiên, việc tạo ra một số thực sự ngẫu nhiên là một nhiệm vụ khá khó khăn. Thực tế là, rất khó để có một máy tính tạo ra các số thỏa mãn yêu cầu về tính ngẫu nhiên thực sự. Vì vậy, các lập trình viên đã tìm ra giải pháp riêng của họ: số ngẫu nhiên giả. Số ngẫu nhiên giả là một dãy số có vẻ là ngẫu nhiên. Tuy nhiên, qua phân tích cẩn thận, chuyên gia có thể tìm thấy các mẫu trong dãy số này. Những con số này không phù hợp để mã hóa các tài liệu bí mật, nhưng lại đủ để mô phỏng việc tung xúc xắc trong trò chơi.

Số giả ngẫu nhiên trong Java

Java cung cấp nhiều thuật toán để tạo ra một dãy số ngẫu nhiên. Hầu hết các thuật toán này dựa trên số trước đó và một số trợ giúp bổ sung. Dưới đây là một ví dụ đơn giản về việc tạo ra 1000 số không trùng lặp:

public class Main {
    public static int a = 41;
    public static int c = 11119;
    public static int m = 11113;
    public static int seed = 1;

    public static int getNextRandom() {
        seed = (a * seed + c) % m;
        return seed;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) {
            System.out.println(getNextRandom());
        }
    }
}

Chúng ta cần lưu ý rằng chúng ta đang nói về "số giả ngẫu nhiên" ở đây. Bằng cách chỉ nhìn vào một con số, chúng ta không thể biết rằng đó là một số ngẫu nhiên hay không.

Đó có nhiều cách khác nhau để có được một số ngẫu nhiên trong Java. Dưới đây là một số phương pháp phổ biến:

1. Math.random()

Trong Java, lớp Math có một phương thức đặc biệt để trả về một số ngẫu nhiên. Phương pháp này được gọi là random(). Ví dụ:

double randomNumber = Math.random();

Phương thức này không nhận tham số và trả về một số thực giả ngẫu nhiên trong khoảng từ 0 đến 1. Số 1 không được bao gồm trong khoảng này.

Tuy nhiên, nếu phương pháp này không đáp ứng yêu cầu của bạn, bạn có thể sử dụng một số phương pháp khác trong lớp Math để lấy số nguyên ngẫu nhiên trong khoảng quy định.

2. Random class

Java cung cấp lớp Random để tạo ra một chuỗi các số ngẫu nhiên. Bạn có thể tạo một đối tượng của lớp Random và sử dụng các phương thức thú vị của nó. Dưới đây là một số phương thức quan trọng của lớp Random:

  • nextDouble(): Trả về một số thực ngẫu nhiên trong khoảng từ 0.0 đến 1.0.
  • nextFloat(): Trả về một số thực ngẫu nhiên kiểu float trong khoảng từ 0.0 đến 1.0.
  • nextInt(int max): Trả về một số nguyên ngẫu nhiên trong khoảng từ 0 đến max. Số 0 bao gồm trong khoảng, nhưng max không phải là.
  • nextInt(): Trả về một số nguyên ngẫu nhiên trong khoảng từ -2 tỷ đến +2 tỷ.
  • nextLong(): Trả về một số nguyên dài ngẫu nhiên trong toàn bộ phạm vi có thể có của các số nguyên dài.
  • nextBoolean(): Trả về giá trị boolean ngẫu nhiên: false hoặc true.
  • nextBytes(byte[] data): Lấp đầy một mảng đã cho với các giá trị ngẫu nhiên.
  • nextGaussian(): Trả về một số thực ngẫu nhiên tuân theo phân phối chuẩn.

Lớp Random cung cấp nhiều phương pháp hữu ích khác, nhưng ở đây chúng ta chỉ xem xét một số phương pháp quan trọng.

1