首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Random 類完整使用指南:生成指定範圍隨機數與機率邏輯

     編輯:Java 相關知識

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(),僅語法糖,效能略差。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved