在这个程序中,内部循环生成100和100之间的随机数
然后停止生成它们
随机数为7.外环重复内循环100次
为什么我的外环不能重做内循环?
好像它只做了一次。
package test;
public class Loops {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
int sum = 0;
int counter = 0;
String randomNumberList = " ";
int c = 0;
while (c != 100){
while (i != 7) {
i = (int) (101 * Math.random());
sum += i;
++counter;
randomNumberList += " " + i;
}
System.out.print("\n loop repeated" + counter+ " times and generated these numbers: " + randomNumberList);
++c;
}
}
}
答案 0 :(得分:7)
内循环运行直到i = 7.完成后,我仍然是7,所以在你将i改为其他值之前它不会再次运行。
如果将其更改为do-while循环,则应该清除问题。
答案 1 :(得分:4)
只是因为在开始内循环之前(或在结束之后)没有重置i
。
因此,在外部循环的第二次和后续迭代中,您将转到内部while
语句,但条件i != 7
仍然是false
并且您不执行内环体。
一个简单的解决方法是在内部i = 0
之前添加while
。
更优雅的解决方法是将内部while
更改为do ... while
。
答案 2 :(得分:0)
最好的解决方法是使用for循环而不是while循环,并减少变量的范围。这样可以产生更清晰,更惯用的编码风格:
import java.util.Random;
...
public static void main(String[] args) {
Random rand = new Random();
for (int c = 0; c < 100; ++c) {
String randomNumberList = " ";
int sum = 0;
int counter = 0;
for (int i = 0; i != 7; ++counter) {
i = rand.nextInt(101);
sum += i;
randomNumberList += " " + i;
}
System.out.println("loop repeated " + counter+ " times and generated these numbers: " + randomNumberList);
}
}
关于上述变化的一些注释:
randomNumberList
,sum
和counter
修复此问题。\n
,而不是在开头,特别是在Unix上,将命令提示符放在最后一行输出的末尾,除非你终止最后一行换行。更好的是,使用println
完全避免这个问题,如上所示。Random.nextInt()
可以获得相同的结果而无需浮点数学和转换。