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

J2ME 隨機數產生完全攻略:Random 類別用法與範圍控制技巧

     編輯:J2ME

J2ME 無 Math.random(),需使用 java.util.Random 產生偽隨機數。本文涵蓋建立策略、基本方法、指定範圍產生與遊戲實務應用技巧。

建立 Random 物件兩種策略

// 1. 預設種子(系統時間毫秒數)— 最常用,每次執行序列不同
Random rnd = new Random();
// 等同於
Random rnd = new Random(System.currentTimeMillis());

// 2. 固定種子 — 可重現序列,適合測試/回放/程序化關卡生成
Random rnd = new Random(10010010L);  // long 種子

基本產生方法

方法回傳範圍用途
nextInt()整個 int 範圍 (-2³¹ ~ 2³¹-1)通用整數
nextLong()整個 long 範圍需 64 位隨機位元
nextBoolean()true/false布林決策
nextFloat()0.0f ~ 1.0fCLDC 1.1+ 支援 float 時可用
nextDouble()0.0 ~ 1.0CLDC 1.1+ 支援 double 時可用
nextBytes(byte[] buf)填充位元組陣列產生隨機二進位資料

指定範圍整數產生通用公式

核心公式:int result = Math.abs(rnd.nextInt() % range) + min;

  • range = max - min + 1
  • Math.abs() 處理負數餘數

常見範圍範例

// 0 ~ 9
int n = Math.abs(rnd.nextInt() % 10);

// 1 ~ 10
int n = Math.abs(rnd.nextInt() % 10) + 1;

// 10 ~ 20
int n = Math.abs(rnd.nextInt() % 11) + 10;  // range=11

// -5 ~ 5
int n = Math.abs(rnd.nextInt() % 11) - 5;

進階技巧與避坑指南

  • 避免模數偏差:nextInt() % n 當 n 非 2 的冪次時分布略不均勻。嚴格均勻需求可用拒絕採樣法(J2ME 通常可忽略)
  • 洗牌演算法(Fisher-Yates):陣列隨機排序,用於撲克牌、獎池抽獎
  • for (int i = deck.length - 1; i > 0; i--) {
        int j = Math.abs(rnd.nextInt() % (i + 1));
        swap(deck, i, j);
    }
    
  • 固定種子除錯:單元測試、關卡重現、網路同步隨機事件時使用固定種子
  • 效能:Random 輕量,可頻繁呼叫。避免在 paint() 迴圈中建立新實例
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved