2017-08-19 258 views
-4

我需要一個函數,它可以生成隨機數,但其中某些數字可以更頻繁地出現在其他數字中。Java「fake」math.random()

比方說,我想從1到10的隨機數字,其中2和3有兩倍的機會出現比其他人。

我該如何在java中做到這一點? Haven沒有爲此找到一個函數。

編輯:代碼,我至今(這是一個妥協的解決辦法,我知道它`不是我想要的)

int min; 
int max; 
double min1; 
double max1; 
for(int j=0;j<Ammount_numbers;j++) { 
      if(min1==0) { 
        min1= min + (Math.random() * (max+1-min)); 
        max1= min + (Math.random() * (max+1-min)); 
      } 

      double randomnumber = min1 + (Math.random() * ((max1-min1) + 1)); 
} 

最小和最大的邊界(1到10中的例子) 並且隨着min1和max1我生成新的更小的邊界,以便隨機數範圍內的隨機數被聚類在一起。 正如我所說:我知道這不是我想要的,它只是一個折衷解決方案,所以我可以與它爲...

+1

您到目前爲止所嘗試的代碼在哪裏,以便我們可以檢查錯誤和問題? –

+2

沒有這樣的就緒功能。必須寫你自己 –

+2

填充數組,並隨機化索引號,添加更多的2和3。 –

回答

0

爲了實現具有規定概率的離散隨機變量的生成器,衆所周知的技術你要用累計概率填充一個數組。這些值將適合範圍[0,1]。

然後通過二分搜索(線性可以爲一個小陣列執行)執行統一的繪圖並確定值所在的子區間。

子區間索引將遵循所需的分佈。

+0

愚蠢downvote。 –

+0

是的。這是一個愚蠢的投票。仍然不知道爲什麼有人低估了這一點。至少,他/她必須評論。 –

+0

好吧,第一部分對我來說很清楚。但是,你對「統一圖紙......」有什麼意思? – Grogak

-1

你不能用Math.random()自己做到這一點,但你可以編寫你自己的random()方法,它使用Math.random()並根據你自己的比例返回你自己的隨機數。

+0

對不起,但國際海事組織這是不夠的評論... –

0

你可以這樣做 現在有越來越2或3

a=(Math.random() * 7) + 4; 
b=(Math.random() * 2) + 2; // math.random() within a range. 
x=Math.random()* 1; 
if(x==0){ 
// print a; 
} 
else if(x==1){ 
// print b; 
} 
+0

我剛剛使用範圍內的Math.random()的概念。這是一篇很好的文章https://stackoverflow.com/questions/7961788/math-random-explained – Arsenal

0

在陣列中的正確的頻率設置你想要的號碼,並選擇從一個隨機進入的可能性爲50%陣列。

Random rand = new Random(); 

// ... 

int specialRandom() { 
    int[] selections = {1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10}; 
    return selections[rand.nextInt(selections.length)]; 
} 

對於更復雜的選擇,使用所需的頻率,選擇一個隨機頻率,並返回匹配數。