2014-04-29 23 views
-3

我想隨機選擇2或4,其中2的概率爲0.9,4的概率爲0.1。我該怎麼做呢?java中的隨機數字(數字2或4)

+3

這絕對不是隨機的......
顯示你所做的,我們不是你的家庭作業服務。 – jwenting

+0

@jwenting爲什麼它不是隨機的?你能預測每次產生什麼數字嗎?我不信。這只是有點不同,因爲OP希望數字不是以均勻分佈生成的(如'Math.Random()'),數字2會更頻繁地出現。 – Templar

+0

這不是隨機的,因爲產生的數字和頻率分佈都不是隨機的。獲得2的機會有90%,獲得4的機率爲10%。 – jwenting

回答

2

您可以使用Math.random()java.util.Random來計算隨機數。

如果您需要更好的安全分佈比使用SecureRandom

實施例:

public int randomFunc() 
{ 
    return Math.random() > 0.1 ? 2 : 4; 
} 

public int randomFunc() 
{ 
    final Random randomGenerator = new Random(); 
    int chance = randomGenerator.nextInt(10); 
    return chance > 0 ? 2 : 4; 
} 

這樣做是:

  • 計算0(inclusiv)和1(不包括)
  • 如果之間的隨機數該數字在0和0.1之間(不包括),而不是數字0
  • 否則它是2

與整數第二個做的:

  • 計算一個隨機整數如果數字爲0,則返回4
  • 別的0之間和9
  • 返回2
+0

不必要的乘法100 –

+1

我強烈建議使用'java.util.Random'(或'SecureRandom')而不是'Math.random()' –

+0

謝謝。我在另一個問題上的建議是使用'Math.random'而不是'java.util.Random'。但對於這個問題'SecureRandom'我認爲是過度殺傷。 – Andrei

4

110之間隨機,如果您得到1,請選擇4。否則,請選擇2

+3

或在[1,10]之間或隨機選擇4,如果得到1 – Hans

+0

yeah2我會將其更改爲最簡單的一個 – Baby

4

開始於Math.random

以正號返回一個double值,大於或等於0.0且小於1.0。返回值是從該範圍內以近似均勻分佈僞隨機選擇的。

利用這些信息,你應該能夠設計出一個簡單的if-else聲明...

int result = 2; 
double value = Math.random(); 
if (value < 0.1) { 
    result = 4; 
} 

例如...

0

下面的函數將實現你想要什麼。

public int GetRandom() 
{ 
    double random = Math.random() * 100 + 1; 
    int num = (int)random; 

    if(num <= 10) 
     return 4; 

    return 2; 
} 
+0

你的代碼不能編譯。修理它。 –

+0

對不起,右括號不正確 –