0

我正在尝试编写一种反复掷硬币直到看到连续三个正面的方法。每次抛硬币时,都会显示所看到的内容(H 表示正面,T 表示反面)。当连续翻转 3 个头时,会打印一条祝贺信息。eg.TTTHTHHH 连续三个头!

public static void threeHeads(){
  Random rnd=new Random();
    char c = (char) (rnd.nextInt(26) + 'a');
    for(int i=1;i<=c.
}

我被困在 for 循环中。我应该如何指定它将循环的次数。即使我声明了 3 个不同的字符 c,我怎样才能将其转换为循环的次数。我在想是否应该找到 ascii表找到哪个数字是 H 和 T 来专门打印这 2 个?或者循环是多余的?

public static void threeHeads(){
  Random rnd=new Random();
    char c = (char) (rnd.nextInt(26) + 'a');
    if(c=='H' && c=='H' && c=='H'){
        System.out.println("Three heads in a row!");
    }
}

另一个问题是 == 和等于的赋值。对于布尔值,我使用 == 我知道对于字符串,我应该使用 equal。那么对于 char 字符,我应该使用什么?eg.char=='y'
我是对的吗?

4

4 回答 4

3

我认为这是一个家庭作业。

而不是使用Random.nextInt,使用Random.nextBoolean
TAILfalseHEADtrue

然后,您需要一个连续的 HEADS 计数器,当转动新HEAD时递增,并在翻转TAIL0时重置。

一旦该计数器的值为3您的循环就有一个退出条件。

于 2013-04-24T00:58:48.403 回答
2
  1. 掷硬币的结果是二元的。将 H 匹配为 1,将 T 匹配为 0。您只能随机生成这两个数字。
  2. 在循环中放置一个计数器cnt,当它为 T (0) 和cnt++H (1) 时将设置为 0。然后你必须跳出循环 if cnt > 2(类似if(cnt>2) break;

  3. 不要忘记每次循环时都需要重新生成随机数。在您当前的代码中,它只执行一次。

我认为这些想法应该足以编写您的代码。

于 2013-04-24T00:58:28.093 回答
1

通常,每当您发现自己问“我如何跟踪 XXX”时,答案就是声明一个新变量。但是,在您的情况下,您可以使用循环计数器i

以下是我将如何解决这个问题:

public static void threeHeads()
{
    Random rnd=new Random();
    char c; //no need to initialize the char

    //ostensibly, we will loop 3 times
    for(int i=0; i < 3; i ++)
    {
          c = rnd.nextBoolean() ? 'h' : 't'; /*get random char*/;

          if (c != 'h')
          {
               //but if we encounter a tails, reset the loop counter to -1
                             //that way it will be 0 next time the loop executes
               i = -1;
          }

          System.out.println(c);
     }
}

这样它会一直尝试循环三次,直到每次都是c'h'

要回答您关于==vs的问题equals()

您始终可以==在原始类型(int、char、double、任何非对象)上使用。对于对象(字符串、Double-with-a-capital D's、Lists),最好使用equals. 这是因为==将测试对象是否是完全相同的对象——仅当它们在内存中占据相同位置时才是正确的。十分之九,您实际上对检查对象是否等效感兴趣,并且您不在乎它们实际上是否是同一个对象。但是,如果您遇到确实想使用==.

于 2013-04-24T01:02:42.077 回答
0
 int head =0;
 int tail =1;
 public static void threeHeads(){
      Random rnd=new Random();
      int headsSeen = 0;
       while(headsSeen < 3){
         int res = rnd.nextInt(1); //returns 1 or 0
         if (res == head){
              headsSeen ++; 
         }else{
              headsSeen = 0; //there was a tail so reset counter
         }
           }
         ///At this point three heads seen in a row
}
于 2013-04-24T01:02:25.650 回答