Random 核心機制
- 採用偽隨機算法(線性同餘法),種子決定序列。
- 相同種子、相同調用次數產生的序列完全一致。
- 兩個建構子:
Random() (種子=系統納秒時間)、Random(long seed) (指定種子)。
常用方法速查表
| 方法 | 回傳範圍 | 說明 |
| nextBoolean() | true/false | 等概率 |
| nextDouble() | [0.0, 1.0) | 均勻分佈 |
| nextInt() | int 全範圍 | -2³¹ ~ 2³¹-1 |
| nextInt(n) | [0, n) | n > 0 |
| nextLong() | long 全範圍 | |
| nextFloat() | [0.0f, 1.0f) | |
| setSeed(seed) | void | 重置種子 |
指定範圍隨機數生成公式
// 整數 [min, max] (含邊界)
int randomInt = random.nextInt(max - min + 1) + min;
// 整數 [min, max) (含最小、不含最大)
int randomInt = random.nextInt(max - min) + min;
// 浮點數 [min, max)
double randomDouble = min + (max - min) * random.nextDouble();
// 浮點數 [min, max] (含邊界,極小機率取到 max)
double randomDouble = min + (max - min) * random.nextDouble(); // 實務同上
實戰範例
1. 生成 6 位數字驗證碼
String code = String.format("%06d", random.nextInt(1_000_000));
2. 從陣列隨機抽取元素
String[] prizes = {"一等獎", "二等獎", "三等獎", "參與獎"};
String prize = prizes[random.nextInt(prizes.length)];
3. 機率邏輯實作:加權隨機
// 需求:55% 回傳 A,30% 回傳 B,15% 回傳 C
int r = random.nextInt(100); // [0, 99]
String result;
if (r < 55) result = "A";
else if (r < 85) result = "B"; // 55~84 共 30 個數
else result = "C"; // 85~99 共 15 個數
進階:ThreadLocalRandom (Java 7+)
// 多執行緒環境下效能優於 Random,無競爭
int n = ThreadLocalRandom.current().nextInt(100);
double d = ThreadLocalRandom.current().nextDouble();
注意事項
- 不要在循環中 new Random():短時間內種子相近導致序列相似。全域共用單一實例或使用 ThreadLocalRandom。
- 安全敏感場景:請使用
java.security.SecureRandom。
Math.random() 內部委派 Random.nextDouble(),僅語法糖,效能略差。