我目前正在尝试用静态数字编辑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之间
代替R<18,范围在15到22之间
代替R<27,范围在22到30之间
所有范围都应该有一个"权重"(90%的机会得到高于范围75%的数字)
感谢任何帮助,谢谢。
以下是我可以考虑的一种方法。查看评论,看看其他人是否有更好的想法或改进,但这就是我想到的:
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%-。这有道理吗?
对于非加权的情况,你可以去random.nextInt(max-min+1) + min;
,并明确地检查我的数学是否有一个错误!
你说的加权是什么意思?
结果是0.9^13非常接近0.25(如果我的数学是正确的,请仔细检查!)。因此,如果你在0-1.0的范围内随机抽取一个数字,并将其提升到13次方,你会在90%的时间内得到小于0.25的数字。加入1-x,使其在90%的时间内大于0.75。