在java中制作硬币是不公平的

时间:2013-11-28 00:23:13

标签: java

我需要制作一个不公平的硬币,使其显示头部的两倍于尾巴。我目前不知道从哪里开始转动flip()类,因此它显示的头部是尾部的两倍。我要问的是,为了让头部显示的频率是尾部的两倍,我必须实现的算法是什么?

这是硬币文件:

public class Coin {
     private final int HEADS = 0;
     private boolean face;

    public Coin() {
        flip();
    }

    public void flip() {
        face = ((int) (Math.random() * 2) != 0);
    }

    public boolean isHeads() {
        return face;
    }

    public String toString() {
        return (isHeads()) ? "Heads" : "Tails";
    }
}

这是CountFilps文件:

public class CoinFlips {
    public static void main(String[] args) {
        final int FLIPS = 1000;
        int heads = 0, tails = 0;

        Coin myCoin = new Coin();

        for (int count = 1; count <= FLIPS; count++) {
            myCoin.flip();

            if (myCoin.isHeads()) {
                heads++;
            } else {
                tails++;
            }
        }
        System.out.println("Number of flips: " + FLIPS);
        System.out.println("Number of heads: " + heads);
        System.out.println("Number of tails: " + tails);
    }
}

编辑:感谢大家的快速回复!我不知道这就是我需要做的所有事情,我感到很傻。

5 个答案:

答案 0 :(得分:6)

Random rand = new Random();
int value = rand.nextInt(3); // Possible values are 0, 1 & 2

if(value == 0) {
   System.out.println("heads");
} else { 
   System.out.println("tail");
}

公平是50%的几率。不公平与50%的几率不同(3中有1 = 33%的几率)。

答案 1 :(得分:2)

用这个替换flip():

face = (Math.random() >= 1/3.0);

希望这是你正在寻找的。

答案 2 :(得分:2)

flip()方法更改为

face = ((int) (Math.random() * 3) < 2);

答案 3 :(得分:2)

只需将您的翻转方法更改为以下内容

即可
public void flip() {
    face = ((int) (Math.random() * 3) != 0);
}

理论上,这将使得硬币成为66.6%的时间,并且尾部为33.3%。

当然,您可以切换您的真/假逻辑,使尾部达到66.6%,然后达到33.3%。

您可以将3更改为任意数字,使用5会使尾部变为80%并且变为20%。

答案 4 :(得分:1)

尝试以下翻转方法。

public void flip() {
    face = (Math.random() >= 1.0 / 3.0);
}