【问题标题】:Java random seedJava 随机种子
【发布时间】:2016-08-12 15:07:38
【问题描述】:

我有一个 Java 作业需要帮助。有一个使用随机数种子的测试程序,它给我带来了相同结果的问题。

 boolean filled = true;
 while(filled)
     {
             int j = GRID_SIZE*GRID_SIZE;
             int k = random.nextInt(j);
             int l = k % GRID_SIZE;
             k = k/GRID_SIZE;
             while(grid[k][l] < 2)
             {
                     int newTile = random.nextInt(100);
                     if(newTile < 90) newTile = 2;
                     if(newTile >= 90) newTile = 4;
                     grid[k][l] = newTile;
                     filled = false;
             }
     }
}

随机对象作为参数传递给类,并在测试文件中设置了一些种子。当我两次运行此方法时,我得到以下矩阵。 GRID_SIZE 是一个全局变量。

[0 0 0 0]
[0 0 0 0]
[2 0 0 0]
[0 0 0 0]

但我应该得到

[0 0 0 0]
[0 0 0 0]
[0 2 0 0]
[0 0 2 0]

知道我的代码有什么问题吗?

编辑:更新了代码和结果。我应该使用 0-15 中的一个数字,而不是 0-3 中的两个数字。我仍然没有得到正确的结果。

还有像这样传入的全局变量和随机参数。

private final Random random;

public Board(int size, Random random) {
this.random = random;
...etc.

我不知道这样做是否正确。

【问题讨论】:

  • 为什么你“应该”得到这个结果?如果正在设置种子,则每次运行代码时都应该得到相同的结果......但不清楚为什么你认为你应该得到与你得到的结果不同的特定结果。
  • 提供了一个测试文件,它告诉我应该得到什么。
  • 它是否指定如何你打算得到那个?您可以通过多种方式实现这一点,这些方式虽然合理,但可能会为同一个种子提供不同的结果。

标签: java random seed


【解决方案1】:

根据定义,使用相同种子初始化的两个Random 实例将产生完全相同的伪随机序列。如果您需要每次都不同,那么您将需要提供不同的种子,即 long 当前时间值对于种子就足够了。

【讨论】:

  • 我试图获得与测试用例完全相同的值。它似乎没有使用相同的种子。我将使用随机参数更新更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2021-07-28
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多