0

以下のコードを使用して、コイントスをシミュレートしようとしています。

public class Coin
{
    public static double result;
        int[] count = new count[2];

    public static void flip()
    {       
        result = Math.random();
    }

        public static boolean isHeads()
        {
        if (result == 0.0)
        {
                    count[0]++;
            return false;
        }

        else
        {
                    count[1]++;
            return true;
        }
        }

        public static void main(String[] args)
        {
             flip();
             isHeads();
             System.out.println(count[0]);
             System.out.println(count[1]);
        }
}

何らかの理由でEclipseは、

java.util.Random をインポートします。

明らかに使用しているにもかかわらず、使用されることはありません。上記のコードに for ループを入れませんでしたが、n 回ループしてから結果を出力します。何回ループしても、常に結果が 0.0 より大きいことを返しますが、これは正しくありません。Math.random を間違って呼び出していますか?

4

6 に答える 6

9

Math を使用しており、Random を使用している可能性がありますが、どこでも Random を使用していません。

何回ループしても、常に結果が 0.0 より大きいことを返しますが、これは正しくありません。Math.random を間違って呼び出していますか?

0.0 と 1.0 の間で 2 ^ 53 の可能な値があり、Random は 48 ビットのシードのみを使用するdoubleため、作成されるすべての値を生成でき、値が 1 つも発生しない可能性があります。SecureRandom を使用すると、2 ^ 53 の確率で 0.0 が返されます。

于 2012-09-21T15:36:56.843 に答える
5

使用することをお勧めします

java.util.Random

public static void main(String[] args) throws Exception {
    Random rand = new Random();

    int headCount = 0;
    int tailCount = 0;

    for (int i = 0; i < 10; i++) {
        int value = rand.nextInt(2);

        if (value == 0) {
            System.out.println("Heads");
            headCount++;
        } else {
            System.out.println("Tails");
            tailCount++;
        }
    }

    System.out.println("Head Count: " + headCount);
    System.out.println("Tail Count: " + tailCount);

}
于 2012-09-21T15:39:19.507 に答える
3

コンパイルの問題を修正すると、「コイン」が公平ではないことがわかります。「表」よりも「裏」の方がはるかに多くなります。実際、「頭」がつくことはめったにありません。

これは、との間ではなくとの間をrandom()与えるためです。したがって、次のように条件を変更する必要があります。double01int01

if (result < 0.5) {
    count[0]++;
    return false;
} else {
    count[1]++;
    return true;
}
于 2012-09-21T15:39:36.037 に答える
2

Math.Random と java.util.Random は 2 つの異なるものです。

static Random random = new Math.Random();
public static void flip()  {       
    result = random.nextDouble();
}

 public static boolean isHeads() {
    if (result > 0.5) {
       count[0]++;
       return false;
    }
    //else {
        count[1]++;
        return true;
    //}
}
于 2012-09-21T15:45:42.760 に答える
1

util.Randomのインスタンスを作成し、それを使用して数値を生成する必要があります。

あなたは置き換えることができます

public static void flip()
{       
    result = Math.random();
}

static Random r = new Math.Random();
public static void flip()  {       
    result = r.nextDouble();
}

必要なのは実際にはブール値であるため、nextBooleanメソッドを使用することをお勧めします。

static Random r = new Math.Random();
static boolean result;
public static void flip()  {       
    result = r.nextBoolean();
}
public static boolean isHeads() {
    count[result?1:0]++;
    return result;
}
于 2012-09-21T15:36:58.607 に答える
1

Math.random()java.lang.Mathクラスのメソッドです

于 2012-09-21T15:37:14.880 に答える