2013-12-17 55 views
0

我目前正試圖編輯下面的代碼在Java中用靜態數字來顯示一個範圍內的數字(這段代碼顯示了塊中某個點的距離,我需要很難找到塊):在一個範圍內的多個加權隨機數

int R = getBlockTypeDistance(event.getClickedBlock().getLocation(), stid); 
if (R == -1){ 
    player.sendMessage(ChatColor.BLUE + plugin.getConfig().getString("text.very_cold")); 
} else if(R < 12) { 
    player.sendMessage(ChatColor.RED + plugin.getConfig().getString("text.very_hot")); 
} else if(R < 18){ 
    player.sendMessage(ChatColor.RED + plugin.getConfig().getString("text.hot")); 
} else if(R < 27){ 
    player.sendMessage(ChatColor.GOLD + plugin.getConfig().getString("text.warm")); 
} 

我尋找隨機生成的數字爲每個其他if語句與在以下範圍:

相反ř< 12,在0和15

之間的範圍

而不是R < 18,範圍15

相反ř< 27之間和22,範圍22和30

之間的所有範圍應具有「權重」(90%獲得高於75%的數中的機會範圍)

任何幫助表示感謝,謝謝。

+0

可能的重複:http://stackoverflow.com/q/363681/2081889 –

+0

他正在嘗試對範圍進行加權,提高出現的數字的概率。絕對不一樣。 –

回答

0

對於非加權的情況下,你可以去random.nextInt(max-min+1) + min;並確定地檢查我的數學一個錯誤!

你是什麼意思加權?原來,0.9^13非常接近0.25(如果我的數學正確 - 請仔細檢查!)。所以如果你在0-1.0的範圍內隨機抽取了13次方,那麼90%的時間內你的數字會小於0.25。投入1-x使其大於0.75 90%的時間。

+0

他並沒有詳細說明他的意思,在我看來,這個問題使得這個問題過於模棱兩可,無法回答(直到改進)。 –

+0

我的意思是讓更高的數字出現更多,因爲這是一個距離的事情,我不希望它經常顯示0-5例如,我不能只有5-15的範圍,因爲需要是0的東西-5 – mobile

+1

這只是基本概率@mobile。有很多方法可以做到這一點,但是您也需要告訴我們您想要衡量的重量。更具體一點 –

0

以下是我能想到的一種方法。關注徵求意見,看是否有其他人有更好的主意或改進,但是這是我想出了:

private static int generateNumber(int min, int max) 
    { 
     Random rnd = new Random(); 
     int randomInt; 

     int weightedMin = (int)Math.round((max - min) * .75) + min; //Create a minimum number that is 75% of the way through the range 

     //Generate a random number between 1 - 100 
     //If that number is between 0 and 90 then generate the top end 
     if ((rnd.nextInt(101) + 1) <= 90) randomInt = rnd.nextInt((max - weightedMin) + 1) + weightedMin; 
     else randomInt = rnd.nextInt((max - min) + 1) + min; 

     return randomInt; 
    } 

基本上它是產生1之間的隨機數 - 100。如果這個數字是介於1這意味着它在90%的概率範圍內,產生75%的範圍。否則它會產生75% - 。這有意義嗎?

+0

我可以編輯我的答案多少次? :P lol –

相關問題