Java中在特定區間產生隨機數

生成指定範圍內的隨機數html


這個是最經常使用的技術之一。程序員但願經過隨機數的方式來處理衆多的業務邏輯,測試過程當中也但願經過隨機數的方式生成包含大量數字的測試用例。問題每每相似於:
如何隨機生成 1~100 之間的隨機數,取值包含邊界值 1 和 100。
或者是:
如何隨機生成隨機的3位整數?
等等……
以 Java 語言爲例,咱們觀察其 Random 對象的 nextInt(int) 方法,發現這個方法將生成 0 ~ 參數之間隨機取值的整數。例如(假設先有 Random rand = new Random();,下同):
rand.nextInt(100);
這行代碼將生成範圍 0~100 之間的隨機數,有趣的是,取值可能爲 0 ,但不可能爲 100。咱們用中學數學課學習的區間表示法,表示爲:[0, 100)。
那麼若是要得到區間 [1~100] 的隨機數,該怎麼辦呢?稍微動動腦筋就能夠想到:區間 [0, 100) 內的整數,實際上就是區間 [0, 99]。由於最大邊界爲100,惋惜不能等於100,所以最大可能產生的「整數」就是99。
既然 rand.nextInt(100) 得到的值是區間 [0, 99],那麼在這個區間左右各加 1,就獲得了區間 [1, 100]。所以,代碼寫成:
rand.nextInt(100) + 1;
便可。
運行下面的代碼,將得到 [1, 100] 的 10 個取值。
import java.util.Random;
public class Test {
public static void main(String[] args){
  Random rand = new Random();
  for(int i=0; i<10; i++) {
   System.out.println(rand.nextInt(100) + 1);
  }
}
}

編譯運行,輸出結果爲:
81
64
31
86
56
14
45
57
28
90
屢次運行,結果每次都不一樣,但取值必定會在 1 和 100 之間,可能出現 1 和 100。
同理,很容易知道若是要得到隨機兩位整數,代碼寫成:
rand.nextInt(90) + 10;
你必定很驚訝,爲何是這麼寫出來的。其實,在 nextInt() 方法中做爲參數的數字 90 表示:你但願生成的隨機數的全部取值的可能性的數量(在本命題中,兩位整數取值爲 [10, 99],共90個數);加好後面的數字 10 ,表示區間的最小取值。
你能夠驗證下,按照這樣理解,[1, 100] 的隨機數,是否是應該寫成 rand.nextInt(100) + 1 。千萬不要把參數 100 理解爲最大取值。只是區間 [1, 100] 正好從 1 開始,因此最大取值和取值可能性數量正好同爲 100。
所以,
生成隨機三位數的代碼爲:
rand.nextInt(900) + 100;
生成區間 [64, 128] 中隨機值的代碼爲:
rand.nextInt(65) + 64;
取值可能性的數量是如何計算出來的呢?固然是 最大取值-最小取值+1 ,因此,有最終公式以下:
// For Java
java

 

// randNumber 將被賦值爲一個 MIN 和 MAX 範圍內的隨機數
int
randNumber = rand.nextInt(MAX - MIN + 1) + MIN;

 

 

在微軟平臺下,因爲 .Net Framework 提供了相應的方法來生成固定區間的整數,因此公式爲:程序員

// For C#
// randNumber 將被賦值爲一個 MIN 和 MAX 範圍內的隨機數
int
randNumber = rand.Next(MIN, MAX + 1);

 

轉自: http://blog.sina.com.cn/s/blog_59aebaa10100ct47.html
相關文章
相關標籤/搜索