[Java] 產生亂數整數的方法

在 Java 中產生亂數有幾種方法,一般人最常用的就是 Math.random() 這個method,這個函式就是回傳一個正的double數值,他是介於 0.0~1.0 之間,但不包含 1.0的值。聰明的你一定想得到,如果我們要產生一個 1~42 的亂數,該怎樣做呢?答案其實很簡單,因為 Math.random()是回傳0.0~1.0之間的值,所以我們可以把 Math.random() 乘以42後,即會變成 0.0~42.0 的值,但不包含 42,再強制轉換成 int 型態後,再加上 1 即可。

用程式碼來說明,即是下列程式碼:

(int)(Math.random()*42+1)

 

第二種方法是使用 Random 這個 Class,以亂數產生整數而言,裡面有兩個函式,分別如下:

public int nextInt(int n)
public int nextInt()

 

就 nextInt(int n) 的原始碼如下:

public int nextInt(int n) {
   if (n <= 0)
     throw new IllegalArgumentException("n must be positive");

   if ((n & -n) == n)  // i.e., n is a power of 2
     return (int)((n * (long)next(31)) >> 31);

   int bits, val;
   do {
       bits = next(31);
       val = bits % n;
   } while (bits - val + (n-1) < 0);
   return val;
 }

 

nextInt() 的原始碼如下:

public int nextInt()
{
    return next(32);
}

 

舉例來說,如果要產生 1~100 的值,我們則可以使用 nextInt(int n) 這個函式,寫法如下:

Random r=new Random();
System.out.println(r.nextInt(100));

 

但如果要產生 0~232 的亂數,則必須要使用 nextInt() 了。

About 張海芋

城市裡的小小迷僮工程師,喜歡用鍵盤記錄個人生活的點滴,身邊的人事物都我的靈感,用心踏出每個腳步,用文字灌溉《海芋小站》,用專業解決問題。

發表迴響