Math.random() 和 Random::nextInt 总是在 for 循环中给出相同的确切数字

0 java random loops

所以我试图用随机数创建一个数组,但是每当我尝试Math.random或创建一个新Random对象并使用它时,我总是多次得到相同的数字。我的代码是这样的:

int[] Array = new int[size];
for (int Y : Array) {
    Array[Y] = (int) (Math.random() * 10) + 3;
}
Run Code Online (Sandbox Code Playgroud)

或者这个:

int[] Array = new int[size];
for (int Y: Array) {
    Array[Y] = rand.nextInt(30); 
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:[0][3][3][3][3][3][3][3][3][3][3][3][3][3][3] ][3][3][3][3][3][3][3][3][3][3][3][3][3][3][3]

我还没有设置种子,我在循环外和内都尝试过,但仍然只能得到相同的数字。

小智 5

您不是指数组的索引,而是指保持不变的特定元素。您必须使用索引循环。

试试这个(对变量使用驼峰式大小写是一个好习惯,所以 'Array' 以小 'a' 开头)

int[] array = new int[size];
for(int i = 0; i < array.length; i++) {
    array[i] = rand.nextInt(30);
}
Run Code Online (Sandbox Code Playgroud)

  • @JoshMiller 问题是,使用“for (int y : array)”形式,“y”将不是数组的索引,而是数组的元素。由于在循环之前您实例化了一个数组而不指定其内容,因此所有元素都设置为“int”的默认值(0),因此“y”将始终为0,并且您始终设置“array[y”的值]`,即“数组[0]” (2认同)