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

J2ME 隨機數生成全攻略:Random 類用法、種子控制與指定範圍取整技巧

     編輯:J2ME

核心類:java.util.Random

J2ME 無 Math.random(),唯一標準來源為 java.util.Random。

建立 Random 實例

// 1. 預設種子 = System.currentTimeMillis()
Random r = new Random();

// 2. 固定種子 (可重現序列,利於測試)
Random r = new Random(10010010L);

// 等價於
Random r = new Random(System.currentTimeMillis());

生成基本隨機值

int    i = r.nextInt();      // 32 位有號整數 (含負數)
long   l = r.nextLong();     // 64 位長整數
boolean b = r.nextBoolean(); // CLDC 1.1+ 支援
float  f = r.nextFloat();    // CLDC 1.1+ 需浮點支援
double d = r.nextDouble();   // 同上
byte[] buf = new byte[16];
r.nextBytes(buf);            // 填充位元組陣列

指定範圍取整數通用公式

// 取 [0, n) 區間
int value = Math.abs(r.nextInt() % n);

// 取 [min, max] 區間
int value = Math.abs(r.nextInt() % (max - min + 1)) + min;

// 範例:0-9
int d = Math.abs(r.nextInt() % 10);

// 範例:10-20
int d = Math.abs(r.nextInt() % 11) + 10;

注意事項

  • nextInt() 回傳負數,必須搭配 Math.abs() 後再取模,否則結果可能為負。
  • 取模法分佈在 Integer.MAX_VALUE 非 n 的倍數時略有偏差,遊戲級應用可接受;嚴格均勻需用拒絕採樣 (效能較差)。
  • 固定種子可重現「隨機」序列,適合單元測試與回放除錯。
  • CLDC 1.0 僅有 nextInt()、nextLong()、nextBytes();nextBoolean/Float/Double 需 CLDC 1.1。

進階:加權隨機 / 洗牌演算法

// Fisher-Yates 洗牌 (陣列原地打亂)
for (int i = arr.length - 1; i > 0; i--) {
    int j = Math.abs(r.nextInt() % (i + 1));
    int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved