2016-12-08 1 views
-1

コイントスをシミュレートし、3つの "ヘッド"を連続して取得するのに必要なトース数を出力するプログラムをJavaで作成します。このプログラムはまた、シミュレートされた投球を行った「頭」および「尾」を画面に出力します。たとえば、出力を生成することが、あなたのプログラムは次のように:Javaプログラムの3つのヘッド?

  • 例1:HTHHH
  • 例2:今すぐTTTHTHHTTTTHHH

私はそれを実行すると、それは連続Hを出力し、無限に実行されます。それは反転しない尾も、頭だけ。だから誰かが私のコードを修正するのを助けることができます.....ありがとう。

マイコード:

import java.util.*; 

public class threeHeads { 

    public static void main(String[] args) { 

     boolean first = false; 
     boolean second = false; 
     int count = 0; 

     Random random = new Random(); 

      while(true){ 

       int n = random.nextInt(2) + 1; //1 is Heads, 2 is Tails 

       if (n == 1){ 
        System.out.println("H"); 
        count++; 

       if (first == false){ 
        first = true; 
       } else if (second == false){ 
        second = true; 
       } else if (second == true){ 
        break; 
       } 
       } 
       else { 
        System.out.println("T"); 
        first = false; 
        second = false; 
        count++; 
        } 

      } 

      if (count == 3){ 
       System.out.println(count); 
      } 

    } 
} 
+0

欲しいものを達成した場合、このコードを参照するために試してみる...'、全体の残りの部分ブロックは最後の2つの代入( 'first = false; second = false')まで' if(n == 1) 'ブロック内にあります。つまり、ループは 'n == 1 'の場合にのみ何も行いません。そうでなければ、次の繰り返しに進むでしょう。 (このようなことは、適切な書式設定が非常に役に立つ理由の1つです!) – yshavit

+0

また、 'someBoolean == true'または' someBoolean == false'をチェックする必要はありません。 'someBoolean'または'!someBoolean'を実行してください。 'if(!second)'チェックがある場合、 'else if(second)'の後には必要ありません。 'else'だけで十分です。なぜなら、secondがfalseでなければtrueでなければならないからです。これは、 'second!= false'と' second!= true'の場合にのみ発生します(そうでなければ、コードは1つを打つでしょう)それらの2つのブロックのうちの1つ)は、当然のことではない。 – yshavit

+0

'random.nextBoolean()'を使わないのはなぜですか? – shmosel

答えて

1

それはあなたが最初の `int型のn =後

public class flipper { 
    public static void main(String[] args) { 
     int heads = 0; 
     int count = 0; 
     while (heads < 3) { 
      int flip = (int)(Math.random() * 2); // range [0, 1] 
      count++; 
      if (flip == 0) { 
       System.out.print("H"); 
       heads++; 
      } else { 
       System.out.print("T"); 
       heads = 0; 
      } 
     } 
     System.out.println("\nIt took " + count + " flips to achieve three heads in a row"); 
    } 
} 
+0

これも機能します...より簡単なバージョンをありがとうございます。 –

関連する問題