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.CrowderJB 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:好的,他们这么说了。他们错了(),但他们确实这么说了。