生成随机数的循环

时间:2013-07-23 10:37:47

标签: java android random

我有这个问题,我在生成数字作为for循环中的条件时观察到。 我在我的android程序中使用它。

当我这样做时:

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}

我总是不超过100

但是当我这样做时:

for (int i = 0; i < 10; i++) {
    temp += new Random().nextInt(1000) + " ";
}

我得到的真实随机数从0到999不等。

实际发生了什么?

我知道我可以这样做:

int x = new Random().nextInt(1000);
for (int i = 0; i < x; i++) {
    temp += i + " ";
}

这确实会返回0-999的随机数。但我只想了解为什么第一个代码只返回不超过100的数字。

7 个答案:

答案 0 :(得分:4)

for (int i = 0; i < new Random().nextInt(1000); i++) { // here upper limit of i will change time to time.
    temp += i + " ";
}

for (int i = 0; i < 10; i++) { // here i increase up to   10
    temp += new Random().nextInt(1000) + " ";
}

int x = new Random().nextInt(1000); // here x is random but this will never change while for loop is running
for (int i = 0; i < x; i++) {
    temp += i + " ";
}

答案 1 :(得分:3)

在此代码中

for (int i = 0; i < new Random().nextInt(1000); i++) {
     temp += i + " ";
}

对于循环的每次迭代,变量i递增1,但是在给定时间点i <100时,有可能随机生成小于'i'的数字,因此循环退出。 / p>

答案 2 :(得分:2)

你应该在循环之前初始化随机变量

int max =  new Random().nextInt(1000);
String temp = ""; 
for (int i = 0; i < max; i++)
 {      temp += i + " ";    }

答案 3 :(得分:2)

Java Doc说:

  

返回一个伪随机数,在0之间均匀分布的int值   (包括)和指定值(不包括)

因此,i的值可能大于nextInt()生成的随机值并且循环退出。

当你在for循环的每次迭代中使用nextInt(1000)生成一个新的Random时,你不会得到一个固定的循环值,它会不断变化,你的输出也会不断变化。

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) { //new random nextInt() called on each iteration
    temp += i + " ";
}

注意:我的程序一直运行到64

答案 4 :(得分:1)

您的第一次实施......

for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}

在每次迭代结束时调用new Random().nextInt(1000)以确定是否该结束循环。相同的代码可以重写如下:

int i = 0;
while (i < new Random().nextInt(1000)) {
    temp += i + " ";
    i++;
}

可能更好地说明为......

int i = 0;
while (true) {
    if (i < new Random().nextInt(1000)) {
        break;
    }
    temp += i + " ";
    i++;
}

所以虽然i的值不断增加,但与之比较的数字new Random().nextInt(1000)却在不断变化。你的比较可能看起来像这样......

if (0 < 981) break;
if (1 < 27) break;
if (2 < 523) break;
if (3 < 225) break;
if (4 < 198) break;
if (5 < 4) break;

在上面的例子中,即使第一次调用new Random().nextInt(1000)正在返回高达981,循环也只发生5次,因为在第6次迭代开始时new Random().nextInt(1000)返回4,其当前值5小于i

希望这有帮助!

答案 5 :(得分:0)

下面

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
        temp += i + " ";
    }

我可能大于100但概率上实际上是不可能的。耶!

答案 6 :(得分:0)

“first for loop”可能会给出小于100但不总是的输出数字,它会给出一系列从0到随机数的数字,该数字由Random.nextInt(1000)方法返回 ....

  

第1和第3个循环方法的工作原理相同......

第二个将从0到999挑选9个随机数,答案如下,(373 472 7 56 344 423 764 722 554 800)