我需要制作一个不公平的硬币,使其显示头部的两倍于尾巴。我目前不知道从哪里开始转动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);
}
}
编辑:感谢大家的快速回复!我不知道这就是我需要做的所有事情,我感到很傻。
答案 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);
希望这是你正在寻找的。 p>
答案 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);
}