2

我被困在一个我不知道如何解决的问题上。我正在尝试使用 RandomGenerator 来模拟掷硬币,直到 RandomGenerator 连续翻转 3 个正面,然后程序退出。

变量flipCounter 跟踪翻转的总数,变量headsFlip 跟踪被翻转的连续磁头。if 条件表示如果翻转是正面,则 headFlips 计数器最多为 3,但如果下一次翻转是尾部,则 headFlips 重置为零。

当我运行程序时,它只打印我的 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();

}
4

3 回答 3

6
while (headsFlip == 3){

这不应该是

while (headsFlip < 3){
于 2013-06-21T00:38:38.307 回答
3

请注意,while只要条件为 ,循环就会继续true。这意味着

while (headsFlip == 3)

只要headsFlipis ,只会执行循环体3。由于循环第一次开始headsFlipis 0,因此不执行循环。

要解决此问题,请将条件更改为

while (headsFlip < 3)
于 2013-06-21T00:45:59.427 回答
0

另外,只是好奇,但您是否不需要更改 else 部分:

 if (flip.equals("heads")){
    headsFlip += 1;
  }else{
    headsFlip = 0;
  }
else {
  headsFlip -= 1

否则,while 循环会在您达到三个正面时立即退出,但不一定是连续三个正面,这确实会改变您的结果。

于 2015-09-14T08:09:30.467 回答