Số ngẫu nhiên (Random)
1. Lớp Random
Phần tiêu đề “1. Lớp 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ố địnhRandom 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ạySystem.out.println(random2.nextInt(100)); // giống hệt random1 vì cùng seedKhô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);Tổng kết
Phần tiêu đề “Tổng kết”Random(góijava.util) cung cấpnextInt(),nextDouble(),nextBoolean()để sinh số ngẫu nhiênnextInt(bound)trả về số trong[0, bound)- dùngnextInt(max - min + 1) + mincho đoạn[min, max]Math.random()là cách nhanh, không cần import, trả vềdoubletrong[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