Bỏ qua để đến nội dung

Số ngẫu nhiên (Random)

import java.util.Random;
Random random = new Random();
int n = random.nextInt(100); // số nguyên ngẫu nhiên trong [0, 100)
int dice = random.nextInt(6) + 1; // mô phỏng tung xúc xắc: [1, 6]
double d = random.nextDouble(); // số thực ngẫu nhiên trong [0.0, 1.0)
boolean b = random.nextBoolean(); // true hoặc false ngẫu nhiên

⚠️ nextInt(bound) trả về số trong khoảng [0, bound) - không bao gồm bound. Muốn số ngẫu nhiên trong đoạn [min, max], dùng công thức: random.nextInt(max - min + 1) + min.

int min = 10, max = 20;
int inRange = random.nextInt(max - min + 1) + min; // ngẫu nhiên trong [10, 20]

2. Math.random() - cách nhanh, không cần import

Phần tiêu đề “2. Math.random() - cách nhanh, không cần import”
double d = Math.random(); // số thực ngẫu nhiên trong [0.0, 1.0), không cần import java.util.Random
int diceRoll = (int) (Math.random() * 6) + 1; // xúc xắc [1, 6]

Math.random() thực chất dùng một Random dùng chung bên trong - tiện cho những lần dùng nhanh, đơn giản, nhưng Random tường minh (mục 1) linh hoạt hơn khi cần seed hoặc gọi nhiều lần trong vòng lặp.

3. Seed - tái tạo lại cùng một chuỗi số “ngẫu nhiên”

Phần tiêu đề “3. Seed - tái tạo lại cùng một chuỗi số “ngẫu nhiên””

Nếu tạo Random với cùng một seed, chuỗi số sinh ra sẽ luôn giống hệt nhau ở mỗi lần chạy chương trình - hữu ích khi cần kết quả có thể tái lập (ví dụ để viết test):

Random random1 = new Random(42); // seed cố định
Random random2 = new Random(42); // cùng seed
System.out.println(random1.nextInt(100)); // luôn ra cùng một giá trị ở mỗi lần chạy
System.out.println(random2.nextInt(100)); // giống hệt random1 vì cùng seed

Không truyền seed (new Random()) thì mặc định dùng một seed dựa trên thời gian hệ thống - mỗi lần chạy chương trình sẽ cho kết quả khác nhau.

4. Chọn ngẫu nhiên một phần tử từ danh sách

Phần tiêu đề “4. Chọn ngẫu nhiên một phần tử từ danh sách”
import java.util.List;
import java.util.Random;
List<String> names = List.of("An", "Bình", "Chi", "Dũng");
Random random = new Random();
String randomName = names.get(random.nextInt(names.size()));
System.out.println(randomName);
  • Random (gói java.util) cung cấp nextInt(), nextDouble(), nextBoolean() để sinh số ngẫu nhiên
  • nextInt(bound) trả về số trong [0, bound) - dùng nextInt(max - min + 1) + min cho đoạn [min, max]
  • Math.random() là cách nhanh, không cần import, trả về double trong [0.0, 1.0)
  • Seed cố định giúp tái lập cùng một chuỗi số ngẫu nhiên giữa các lần chạy - hữu ích khi viết test