我遇到了一个我不知道如何解决的问题。我正在尝试使用RandomGenerator来模拟翻转硬币,直到RandomGenerator翻转3个连续的头,然后程序退出。
Variable flipCounter跟踪翻转和可变头的总数.Flip跟踪翻转的连续头。 if条件表示如果翻转是磁头启动headFlips计数器最多为3但是如果下一次翻转是尾部,则磁头重置为零。
当我运行程序时,它只是在我的run方法中输出最后一个语句,甚至不运行while循环。我不知道为什么程序不起作用,因为我希望它可以工作。
import acm.program.*;
import acm.util.*;
public class HeadsFlipThreeInARow extends ConsoleProgram{
public void run(){
int flipCounter = 0;
int headsFlip = 0;
while (headsFlip == 3){
String flip = coinFlip();
println(flip);
if (flip.equals("heads")){
headsFlip += 1;
}else{
headsFlip = 0;
}
flipCounter++;
flip = coinFlip();
} /* end of while loop */
println("It took " + flipCounter + "flips to reach 3 consecutive heads.");
} /* end of run method */
private String coinFlip (){
String flip = rgen.nextBoolean() ? "heads" : "tails";
return flip;
}
private RandomGenerator rgen = RandomGenerator.getInstance();
}
答案 0 :(得分:6)
while (headsFlip == 3){
不应该是
while (headsFlip < 3){
答案 1 :(得分:3)
请注意,只要条件为while
,true
循环就会继续。这意味着
while (headsFlip == 3)
只要headsFlip
为3
,就会执行循环体。从第一次循环开始,headsFlip
为0
时,循环不会执行。
要解决此问题,请将条件更改为
while (headsFlip < 3)
答案 2 :(得分:0)
另外,只是好奇,但是你不需要改变其他部分:
if (flip.equals("heads")){
headsFlip += 1;
}else{
headsFlip = 0;
}
else {
headsFlip -= 1
否则while循环会在你到达三个头时立即退出,但不一定会连续三个头,这可能会改变你的结果。