【问题标题】:Math.random() and Random::nextInt always give the same exact number inside a for loopMath.random() 和 Random::nextInt 在 for 循环中总是给出相同的确切数字
【发布时间】:2021-06-07 09:06:00
【问题描述】:

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

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

或者这个:

int[] Array = new int[size];
for (int Y: Array) {
    Array[Y] = rand.nextInt(30); 
}

我得到的输出是:[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]

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

【问题讨论】:

  • 根据通常的Java实践,局部变量通常以小写字母开头,所以它应该是“array”而不是“Array”。你的代码肯定会以任何一种方式编译,但它可能会让其他 Java 程序员更难阅读。

标签: java loops random


【解决方案1】:

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

尝试一下(对变量使用 camelCase 是一个很好的做法,所以 'Array' 以小 'a' 开头)

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

【讨论】:

  • 这行得通,非常感谢!还有一个问题,问题是当我使用 (int Y:Array) 而不是 int i 时?
  • 问题是由于一个事实,当你迭代一个数组并且你想根据索引改变每个元素时,你必须使用一个迭代索引。在这种情况下,您使用 int i = 0 作为数组开始,例如,以下对 5 的迭代指的是索引:array[0] = rand.nextInt(30);数组[1] = rand.nextInt(30);数组[2] = rand.nextInt(30);数组[3] = rand.nextInt(30);数组[4] = rand.nextInt(30);然后您可以通过索引访问每个元素:)
  • @JoshMiller 问题是使用for (int y : array) 形式,y 将不是数组的索引,而是数组的元素。由于在循环之前您实例化了一个数组而不指定其内容,所有设置为int 的默认值(0)的元素,所以y 将始终为0,并且您始终设置array[y] 的值,那是array[0]
猜你喜欢
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
相关资源
最近更新 更多