Java-生成近似随机数。(优于java的随机类)

Java-生成近似随机数。(优于java的随机类),java,random,numbers,Java,Random,Numbers,嗨!我正在制作一个2d沙盒游戏(比如terraria)。一切正常。到目前为止,它可以生成随机的地形和树木。不过我遇到了一个问题 我使用Java的Random类生成一个随机数,用于确定是否创建树。问题是:树木似乎聚集在一起。我得到了大片没有树木的区域,然后是大片树木密集的区域。我认为这是因为Java的Random类不够随机 JDK或我可以安装的任何外部库中是否有其他类可以生成真正的随机数?提前感谢:D ---编辑---- 下面是我如何生成数字的 Random rand = new Random()

嗨!我正在制作一个2d沙盒游戏(比如terraria)。一切正常。到目前为止,它可以生成随机的地形和树木。不过我遇到了一个问题

我使用Java的Random类生成一个随机数,用于确定是否创建树。问题是:树木似乎聚集在一起。我得到了大片没有树木的区域,然后是大片树木密集的区域。我认为这是因为Java的Random类不够随机

JDK或我可以安装的任何外部库中是否有其他类可以生成真正的随机数?提前感谢:D

---编辑---- 下面是我如何生成数字的

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地图创建方法我的回答。