gpt4 book ai didi

java - 随机生成器每次都给我相同的数字

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:07 25 4
gpt4 key购买 nike

import java.util.Random;

public class Fighter {
int str;
int dex;
int hth;
Random gen = new Random(1535636);

public Fighter() {
str = gen.nextInt(9);
dex = gen.nextInt(9);
hth = gen.nextInt(14);
}


public int getHth(){

return hth;

}

public int getStr(){
return str;
}

public int getDex(){
return dex;
}
}


import java.util.Random;
public class Arena {


public static void main(String[] args) {
Random gen = new Random();
Fighter Guy1 = new Fighter();
int x =1;
while (x < 200000000){
x++;
}
Fighter Guy2 = new Fighter();

int hth1 = Guy1.getHth();
int hth2 = Guy2.getHth();

System.out.println("Fight Start");
System.out.println("---------------");
//System.out.println(gen.nextInt(10));
//System.out.println(gen.nextInt(17));
System.out.println(Guy1.getStr());

//Fighting



}



}

每当我运行它时,无论如何我都会得到相同的结果。我希望它每次都能随机生成 2 名战士。现在有几行只是为了确认它不会生成随机数。

有谁知道如何在构造函数中正确使用随机数?还是我这样做完全错了?

最佳答案

您正在为随机数生成器提供一个恒定的种子值:

Random gen = new Random(1535636);  

不要那样做。它将始终提供相同的值。只需调用默认构造函数:

Random gen = new Random();

那个

Creates a new random number generator. Its seed is initialized to a value based on the current time:

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#Random()


为什么?

与大多数“标准库”随机数生成器一样,Random 是一个 "Pseudorandom number generator" .这意味着它不是实际上生成随机数!相反,它以一种非常明确的方式计算它们 - 它们只是看起来像随机数,而且它们往往具有良好的分布。

PRNG 使用种子值 进行初始化,该种子值设置其内部状态。如果您每次都提供相同的种子值,那么每次运行 PRNG 时都会处于相同的状态,因此会提供相同的数字序列!

让它们看起来总是随机的是,通常1它们默认“播种”一个基于时间的值。在大多数库中,这是一个非常精确的时间派生值。所以大多数时候,如果您看到有人播种他们的 PRNG,这可能是不正确的,或者至少是非常不必要的。

1 - 注意:不是来自 libc 的 rand() 的情况:“如果没有提供种子值,rand( ) 函数自动使用值为 1 的种子。”

关于java - 随机生成器每次都给我相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com