0

連続して 3 つの表が見えるまで、コインを繰り返し投げるメソッドを作成しようとしています。コインを投げるたびに、何が見えるかが表示されます (H は表、T は裏)。連続して 3 つの表が裏返されると、お祝いのメッセージが印刷されます。eg.TTTHTHHH 3 回連続で頭が下がります!

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

forループの中で立ち往生しています。ループする回数を指定するにはどうすればよいですか。3つの異なるchar cを宣言しても、ループする回数に変換するにはどうすればよいですか。これらの 2 つを特別に出力するには、H と T の番号を見つけるためのテーブル?またはループは冗長ですか?

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!");
    }
}

もう 1 つの問題は、== と等しい代入です。ブール値の場合、私は == を使用します。文字列の場合、equal を使用する必要があることを理解しています。次に、char 文字の場合、何を使用すればよいですか? eg.char=='y'
そうですか。

4

4 に答える 4

3

これは宿題だと思います。

を使用する代わりに、 をRandom.nextInt使用してRandom.nextBooleanください。
TAILがHEADであるとします。falsetrue

次に、新しいHEADが回転したときにインクリメントされ、 TAILが反転し0たときにリセットされるHEADSのカウンターが連続して必要です。

そのカウンターの値が に3なると、ループの終了条件が得られます。

于 2013-04-24T00:58:48.403 に答える
2
  1. コイントスの結果はバイナリです。H を 1 に、T を 0 に一致させます。これら 2 つの数字をランダムに生成するだけです。
  2. cntT (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'、毎回ループするまで 3 回ループしようとし続けます。

==vsに関する質問に答えるにはequals():

==プリミティブ型 (int、char、double、オブジェクト以外のもの) にはいつでも使用できます。オブジェクト (文字列、Double-with-a-capital D、リスト) の場合は、 を使用することをお勧めしますequals。これは、オブジェクトがまったく同じ==かどうかをテストするためです。これは、メモリ内の同じ場所を占有している場合にのみ当てはまります。10 分の 9 の確率で、実際にはオブジェクトが同等かどうかをチェックすることに関心があり、それらが文字通り同じオブジェクトであるかどうかは気にしません。ただし、 を使用したい状況に遭遇した場合に備えて、この詳細を理解しておくことをお勧めします。==

于 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 に答える