翻转三个连续的头然后使用RandomGenerator编程退出

时间:2013-06-21 00:35:46

标签: java random

我遇到了一个我不知道如何解决的问题。我正在尝试使用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();

}

3 个答案:

答案 0 :(得分:6)

while (headsFlip == 3){

不应该是

while (headsFlip < 3){

答案 1 :(得分:3)

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

while (headsFlip == 3)
只要headsFlip3

就会执行循环体。从第一次循环开始,headsFlip0时,循环不会执行。

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

while (headsFlip < 3)

答案 2 :(得分:0)

另外,只是好奇,但是你不需要改变其他部分:

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

否则while循环会在你到达三个头时立即退出,但不一定会连续三个头,这可能会改变你的结果。