我目前正在尝试使用静态数字在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&lt; 12,范围在0到15之间
而不是R&lt; 18,范围在15和22之间
而不是R&lt; 27,范围在22和30之间
所有范围都应该具有“重量”(在该范围内获得高于75%的数字的概率为90%)
感谢任何帮助,谢谢。
答案 0 :(得分:0)
对于非加权的情况,你可以去random.nextInt(max-min+1) + min;
并定义一个错误来检查我的数学!
加权是什么意思?
事实证明0.9 ^ 13非常接近0.25(如果我的数学是正确的 - 请仔细检查!)。因此,如果你在0-1.0的范围内随机取得一个随机数,那么在90%的时间里,你的数字会小于0.25。投入1-x使其在90%的时间内大于0.75。
答案 1 :(得分: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之间,则表示它处于90%概率范围内,生成75%+范围。否则它会产生75% - 。这有意义吗?