Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Random.nextInt()仅在循环中重复数字_Java - Fatal编程技术网

Java Random.nextInt()仅在循环中重复数字

Java Random.nextInt()仅在循环中重复数字,java,Java,我试图按程序在二维网格上生成一个世界。对于随机数生成,我使用了一个单个全局java.utils.random实例和一个seed。 像这样: 公共类游戏{ 私有静态最终整数种子=1111; 私有静态最终随机=新随机(种子); private static final int roomsCount=GeneratorDomainNumberOfRooms(); } 在我写下这个方法之前,一切都很顺利: public ArrayList generateRandomCoordinates(){ Ar

我试图按程序在二维网格上生成一个世界。对于随机数生成,我使用了一个单个全局java.utils.random实例和一个seed。
像这样:

公共类游戏{
私有静态最终整数种子=1111;
私有静态最终随机=新随机(种子);
private static final int roomsCount=GeneratorDomainNumberOfRooms();
}
在我写下这个方法之前,一切都很顺利:

public ArrayList generateRandomCoordinates(){
ArrayList coords=新的ArrayList(roomsCount);
对于(int i=0;i

当我执行它时,我会得到XY坐标的列表,但它们都有相同的两个X和Y值,例如(11,20)或(12,5)。。。所有的房间都在同一地点。在我看来,for循环中对RANDOM.nextInt()的调用不会更新RANDOM实例的状态。
在我调用的所有其他函数RANDOM.nextInt()中,它都可以正常工作。其中一些也用于循环。问题只在于此函数。它直接在main()中使用一次,不嵌套在任何地方。
有人知道问题出在哪里吗?如果您需要,我可以上传更多的代码,但我认为这与此无关。

不必要的行为1:每次应用程序运行都会以相同的顺序生成相同的值。原因是您的
RANDOM
对象被一个种子实例化。尝试以下自适应:(删除种子,允许
Random
为您提供随机值):

如果出于某种原因需要种子,可以尝试在每次启动时更新种子

澄清种子的实际用途:

(请注意,如果提供种子,则种子也会从构造函数中设置)

种子

公共空种子(长种子)

设置此随机变量的种子 使用单个长种子的数字生成器。工程总承包 设置速度是改变随机数发生器的状态 对象,使其处于完全相同的状态 以参数seed作为种子创建。设置种子的方法是 通过将seed原子更新为(seed)由类Random实现^
0x5DEECE66DL)和(1L)是两个相同的X和Y值,例如(11,20)或(12,5)。11与20不同。(11,20)与(12,5)不同。到底是什么问题?发布一个完整的最小示例来重现该问题。我们必须能够将其复制并粘贴到IDE中,然后运行它。我猜OP意味着每次执行他/她的应用程序时,都会重新生成相同的数对a,这是因为使用了相同的种子。如果是这种情况,OP应该只使用新的种子eveY时间(或者更好,完全移除种子,允许
Random
每次使用一个新的)@Cascader这是正确的答案“我得到了XY坐标的列表,但它们都有相同的两个X和Y值”-这表示你得到了类似
(12,5)、(12,5)、(12,5)…
。如果是这样,那么就用
nextInt(…)
返回相同的值,所有的
XYCoords
实例更可能共享相同的数据。您能告诉我们该类或理想情况吗?-如果是Cascader假设的,即您的“问题”每次运行应用程序时,坐标都是相同的,那么每次都需要删除种子或使用不同的种子(例如当前系统时间)。您是否将XYCoords中的xy变量声明为
static
public class Game {

    private static final Random RANDOM = new Random();
    private static final int roomsCount = generateRandomNumberOfRooms();
}