如何在使用“ for”时初始化具有多个值的整数数组

时间:2019-05-02 10:43:24

标签: java arrays

当我试图用Java创建一个小型GUI时,我偶然发现了这个关于数组的小问题。

我试图将随机整数插入一维数组中,只是发现不会分配随机整数。

//Declaring an Integer Array    
int[] wuerfel = new int[2];

//It will loop once while assigning a random number to the array
            for(int i = 0;  i <= 1; i++) {
                Random rand = new Random(6);
                int zahlen = rand.nextInt(6) + 1;
                wuerfel[i] = zahlen;
            }

System.out.println(Arrays.toString(wuerfel));

我希望数组的输出为1 - 6之间的数字。

但是,每次尝试重新运行时,我始终收到[2,2]

3 个答案:

答案 0 :(得分:3)

构造函数调用new Random(6)并没有您认为的那样:6是种子,而不是可能的输出范围。因此,每次都会产生相同的输出。

可能的解决方案:

  • 改为使用Random()的无参数构造函数,这将每次为其赋予不同的种子。
  • 在循环外声明和初始化rand,无论是否带有显式种子。
  • 使用Math.random()

答案 1 :(得分:2)

因此,在代码中,您为Random设置了一个种子,并在每次循环迭代中创建了一个新的Random对象,因此每次返回的数字相同。如果使用种子,Random类的文档说:

  

如果使用相同的种子创建两个Random实例,并且为每个实例创建相同的方法调用序列,则它们将生成并返回相同的数字序列。

在您的情况下,您可以从构造函数中消除种子值,也可以将Random类对象的创建移出循环:

public static void main(String[] args) {
        int[] arr = new int[2];

        Random rand = new Random();

        for(int i = 0;  i <= 1; i++) {
            int zahlen = rand.nextInt(6) + 1;
            arr[i] = zahlen;
        }

        System.out.println(Arrays.toString(arr));
    }

在这里,我将Random实例的创建移到了循环之外,因此仅创建了一个对象,并且没有将种子传递给构造函数。我可以传递种子,但是在这种情况下不需要,因为我不需要创建更多的Random实例,也不需要它们来产生相同的结果。

答案 2 :(得分:-1)

*  
    int[] wuerfel = new int[2];
    //It will loop once while assigning a random number to the array
           Random rand = new Random();                 
               for(int i = 0;  i <= 1; i++) {
                    int zahlen = rand.nextInt(6) + 1;
                    wuerfel[i] = zahlen;
                }
    System.out.println(Arrays.toString(wuerfel));

*尝试使用传递参数创建一个随机对象