2012-07-06 25 views
-1

我用這來嘗試創建一個加權隨機:使用switch語句來測試加權隨機數

int choice_weight[] = { 25, 25, 25, 25 }; 
int num_choices = choice_weight.length; 
Random random = new Random(); 
int i; 
int sum_of_weight = 0; 

for (i = 0; i < num_choices; i++) { 
    sum_of_weight += choice_weight[i]; 
} 

int rnd = random.nextInt(sum_of_weight); 
System.out.println(rnd); 

for (i = 0; i < num_choices; i++) { 
    if (rnd < choice_weight[i]) 
     rnd -= choice_weight[i]; 
} 

我使用的是馬桶蓋語句來測試,看看情況是:

case 1: 

case 2: 

case 3: 

case 4: 

問題是random.nextInt(sum_of_weight)正在生成100到0之間的數字,這是基於我的25,25,25,25的4個權重。我需要一個數字來匹配其中一個可能的情況1-4?還是應該改變我的測試方法?

這整個過程是有點讓我困惑,有些幫助將不勝感激。

所以基本上選擇一個特定數字的概率是25%。另外,我會在整個程序的生命週期中改變百分比。

+0

開關在哪裏起作用? – 2012-07-06 02:19:56

+0

它選擇了一個精靈放置到場景中 – 2012-07-06 02:38:23

+0

問題的標題「使用switch語句測試加權隨機數」很具誤導性 - 問題與switch語句無關(順便提一下,許多人認爲是邪惡的,但那是另一回事)。我也沒有看到「問題」究竟是什麼...... – 2012-07-06 02:58:26

回答

1

測試您的號碼時,您不應該「增加」您的範圍嗎?即:

System.out.println(rnd); 

int winner=0; 
int rangeHigh=0; 
for (i = 0; i < num_choices; i++) { 
    rangeHigh += choice_weight[i]; 
    if (rnd < rangeHigh){ 
     winner = (i+1); 
     break; 
    } 
} 
System.out.println("lucky winner number: " + winner); 

基本上你產生0-99之間的數字和檢查,如果你的值是:

1. < 25 //bucket 1 - [0-24] 
2. < 50 //bucket 2 - [25-49] 
3. < 75 //bucket 3 - [50-74] 
4. < 100 //bucket 4 - [75-99] 

在第二看你有它也可以工作的方式(W /調整) :

int winner = 0; 
for (i = 0; i < num_choices; i++) { 
    if (rnd < choice_weight[i]){ 
     winner = i+1; 
     break; 
    } 
    rnd -= choice_weight[i]; 
} 
+0

那麼,如果我在程序生命週期中改變百分比,會發生什麼?例如,而不是它是25,25,25,25我把權重改爲60,10,10,20 ?? – 2012-07-06 02:38:06

+0

它會沒問題。你的範圍是基於你的數組..範圍將是[0-59,60-69,70-79,80-99]。你甚至可以超過100,它應該仍然是好的。 – 2012-07-06 02:39:25

+0

謝謝很多人!我現在完全理解它,它已經運行起來了! – 2012-07-06 02:51:35

0

我想用4種情況測試1到25之間的數字; 25 - 50; 51 - 75;和76-100。

您可以將您的開關設置爲一樣的東西:

case 1 ((num >1)&&(num<25))... 

等等......這樣,你將永遠有一個測試結果。

希望有所幫助。