2014-02-05 92 views
0

我一直在試圖爲一個簡單的戰鬥模擬器編寫這個程序,我必須要做的一件事就是要求用戶在戰鬥中的低,中,高攻擊比例。在java中改變概率

因此,例如,用戶輸入低= 50%,中= 30%,高= 20%。現在我的問題來自於這裏。如何做到這一點,以便在一輪內節目打印時間低50%,中等30%,高20%。

+2

你必須發佈一些示例代碼給任何人來幫助你。 –

回答

1

沒有給你確切的Java代碼,這裏是你需要做什麼:

  1. 創建一組間隔。在你的情況下,它是[0, 0.5>[0.5, 0.8>; [0.8, 1.0>
  2. 生成一個介於0和1之間的隨機數
  3. 查看它落在什麼區間。它將落入第一個區間的50%的時間,第二個區間的30%的時間和第三個區間的20%時間

你可以從這裏弄明白嗎?

Afterthought:就你而言,用戶輸入的值合計達100%。一般來說,這可能不是真的;那麼你首先計算「明顯區間」,最後將它們縮放到最大值1.假設用戶輸入了50,30,30%(不能算他們的數學......)。你的時間間隔將

0, .5 
.5, .8 
.8, 1.1 

而且你將不得不通過1.1來劃分的一切得到正確的時間間隔。或者您可以將您的隨機數乘以1.1

+1

由於隨機數在[0,1>範圍內,您的間隔不應該是[0,0.5> [0.5,0.8> [0.8,1>? – ILMTitan

+0

@ILMTitan你是對的 - 編輯。 – Floris

1

我能想到的最簡單的就是創建您的要求相同比例(在這裏我創建了10串5個低點,3個媒介和2周的高點)

String[] probabilities = { "low", "low", "low", "low", "low", "medium", "medium", "medium", "high", "high }; 

然後用隨機數數組從陣列中挑選一個元素

Random random = new Random(); // might want to give it a seed here 
int randomIndex = random.nextInt(probabilities.length); 
String probability = probabilities[randomIndex]; 

對於大量採樣,這應該會給你想要的分佈。

+0

不錯的和簡單的解決方案 – Leo