Java 随机(种子)。nextInt始终为生成的第一个数字生成0
这是我的密码:Java 随机(种子)。nextInt始终为生成的第一个数字生成0,java,Java,这是我的密码: import java.util.*; public class RandGen { Random rd; static final int SIZE = 1; int[] result = new int[SIZE]; public RandGen(int seed) { rd = new Random(seed); for(int i=0;i<SIZE-1;i++) {
import java.util.*;
public class RandGen
{
Random rd;
static final int SIZE = 1;
int[] result = new int[SIZE];
public RandGen(int seed)
{
rd = new Random(seed);
for(int i=0;i<SIZE-1;i++)
{
result[i] = rd.nextInt((int) Math.pow(10,9)+1);
}
}
}
import java.util.*;
公共级兰登
{
随机rd;
静态最终整数大小=1;
int[]结果=新的int[大小];
公共基金(国际种子基金)
{
rd=新随机(种子);
对于(inti=0;i所以问题在于for
循环,逻辑测试基本上说“只要0小于0”,增量i
SIZE
为1,然后将SIZE-1
放在等于0的位置
编辑:正如下面的T.J.Crowder和JB Nizet所提到的那样,for
循环从不设置数组中最后一个元素的值,因为它只对SIZE-1
元素运行,并且循环从未进入。我在这里看到两个问题:
正如另一个答案所概述的,循环条件是“关闭1”;在其当前版本中,该循环是从不进入的;因此数组只保留其“初始”值(全部为零)
当您一直使用相同的种子调用代码时,那么…那里就没有“随机性”。然后序列将始终保持相同。这就是使用种子的意义
如果使用的数组大小为size
,则其位置在间隔0..size-1
上。然后要遍历数组中的所有值,for
循环应为for(int i=0;i作为种子传递的值是什么?为什么要显式设置种子?无论我经过哪个种子,它都会给我0@paradox:这是因为循环体从未运行过,如果您使用调试器单步执行代码,您会看到这一点。当您遇到这样的小问题时,请使用调试器。它是您的朋友。@T.J.Crowder将大小更改为2或任意数字,它将给出0…因此random[0]
从未设置为任何值,因为循环体从未运行,因此它保留其默认值0
,因此似乎将0
作为第一个随机数。请将大小更改为2或任意数,它将为您提供0。顺便说一句,seed的值也是任意的。@paradox不,它不会。数组中的最后一个元素数组总是0,因为最后一个元素从未设置,因为循环一直到大小-1而不是大小。@MouseEvent:好的,他们这么说了。他们错了(),但他们确实这么说了。