簡體   English   中英

范圍內的多個加權隨機數

[英]Multiple Weighted Random Numbers in a range

我目前正在嘗試使用靜態數字在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語句尋找一個隨機生成的數字,其范圍如下:

而不是R <12,范圍是0到15

15到22之間的范圍代替R <18

而不是R <27,而是22到30之間的范圍

所有范圍都應有一個“權重”(90%的機會獲得高於范圍內75%的數字)

任何幫助表示贊賞,謝謝。

對於非加權情況,您可以執行random.nextInt(max-min+1) + min; 並確定檢查我的數學是否有一個錯誤!

您所說的加權是什么意思?

事實證明0.9 ^ 13非常接近0.25(如果我的數學正確,請仔細檢查!)。 因此,如果您在0-1.0的范圍內進行隨機選擇,並將其提高到13的冪,則90%的時間中得到的數字小於0.25。 投入1-x以使其大於0.75 90%的時間。

這是我可以考慮的一種方法。 注意評論,看看別人是否有更好的主意或改進,但這是我想出的:

    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之間(含1和90),則意味着它在90%的概率范圍內,請生成75%+的范圍。 否則會產生75%-。 這有意義嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM