当我试图用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]
。
答案 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));
*尝试使用传递参数创建一个随机对象