Java-生成近似随机数。(优于java的随机类)
嗨!我正在制作一个2d沙盒游戏(比如terraria)。一切正常。到目前为止,它可以生成随机的地形和树木。不过我遇到了一个问题 我使用Java的Random类生成一个随机数,用于确定是否创建树。问题是:树木似乎聚集在一起。我得到了大片没有树木的区域,然后是大片树木密集的区域。我认为这是因为Java的Random类不够随机 JDK或我可以安装的任何外部库中是否有其他类可以生成真正的随机数?提前感谢:D ---编辑---- 下面是我如何生成数字的Java-生成近似随机数。(优于java的随机类),java,random,numbers,Java,Random,Numbers,嗨!我正在制作一个2d沙盒游戏(比如terraria)。一切正常。到目前为止,它可以生成随机的地形和树木。不过我遇到了一个问题 我使用Java的Random类生成一个随机数,用于确定是否创建树。问题是:树木似乎聚集在一起。我得到了大片没有树木的区域,然后是大片树木密集的区域。我认为这是因为Java的Random类不够随机 JDK或我可以安装的任何外部库中是否有其他类可以生成真正的随机数?提前感谢:D ---编辑---- 下面是我如何生成数字的 Random rand = new Random()
Random rand = new Random();
rand.setSeed(worldGenerator.getSeed());
int randomNumber = rand.nextInt(1000) + 1;
这几乎肯定不是Java的
Random
的问题,而是统计中常见的错觉。这被称为。基本上,随机分布会产生密集和稀疏的区域,而不是所有区域都是均匀分布的,因为均匀分布是一种规律
对于从随机分布中获得更均匀的分布,对于一维地图,您可以尝试大致达到以下效果:
Random rand = new Random();
int i=0;
while(i<mapSize){
int distanceToNextTree = rand.nextInt(MAX_DISTANCE_BETWEEN_TREES-MIN_DISTANCE_BETWEEN_TREES)
+MIN_DISTANCE_BETWEEN_TREES;
i = i+distanceToNextTree;
if(i< mapSize){
putTree(i);
}
}
Random rand=new Random();
int i=0;
虽然(i这几乎肯定不是Java的随机
的问题,而是统计中常见的错觉。这被称为。基本上,随机分布创建密集和稀疏的区域簇,而不是所有区域都均匀分布,因为均匀的间隔是一种规则形式
对于从随机分布中获得更均匀的分布,对于一维地图,您可以尝试大致达到以下效果:
Random rand = new Random();
int i=0;
while(i<mapSize){
int distanceToNextTree = rand.nextInt(MAX_DISTANCE_BETWEEN_TREES-MIN_DISTANCE_BETWEEN_TREES)
+MIN_DISTANCE_BETWEEN_TREES;
i = i+distanceToNextTree;
if(i< mapSize){
putTree(i);
}
}
Random rand=new Random();
int i=0;
while(我如何使用Random
生成数字?除非您知道自己在做什么,否则不要提供自定义种子。我相信您需要在rand.nextInt()
返回的数字上进行自己的调整(如augray所回答的)当然,您只创建了一个Random实例,并反复使用它,对吗?如果您创建了Random实例,但这还不够好,您可以尝试使用底层平台的true Random number generator(如果存在)。@ThatPixelCherry:刚刚意识到您提到的地图是2d的。我添加了一种2d地图创建方法我的答案。你是如何使用随机
生成数字的?除非你知道自己在做什么,否则不要提供自定义种子。我相信你需要在rand.nextInt()
返回的数字上做自己的调整(如augray所回答的)当然,您只创建了一个Random实例,并反复使用它,对吗?如果您创建了Random实例,但这还不够好,您可以尝试使用底层平台的true Random number generator(如果存在)。@ThatPixelCherry:刚刚意识到您提到的地图是2d的。我添加了一种2d地图创建方法我的回答。