2个randoms似乎给出了几乎相同的结果

use*_*276 2 java random android probability

提前感谢花时间看我的问题.任何有同样问题的人都希望我们能得到解决方案......

所以基本上我有一个应用程序同时旋转2个硬币并显示结果.

这种方法产生第一枚硬币......

    public void coinResult1(){
     ImageView coin1View = (ImageView) findViewById(R.id.coin1);
     Random r = new Random();
     int coin1result = r.nextInt(2);

     if (coin1result == 0){
        coin1View.setBackgroundResource(R.drawable.coinheads);
        coinresult1 = 0;
     }
        else if (coin1result == 1) {
            coin1View.setBackgroundResource(R.drawable.cointails);
            coinresult1 = 1;
        }
}
Run Code Online (Sandbox Code Playgroud)

这是第二枚硬币

public void coinResult2(){
    ImageView coin2View = (ImageView) findViewById(R.id.coin2);

    Random r = new Random();
    int coin2result = r.nextInt(2);

    if (coin2result == 0){
        coin2View.setBackgroundResource(R.drawable.coinheads);
        coinresult2 = 0;
    }
        else if (coin2result == 1) {
            coin2View.setBackgroundResource(R.drawable.cointails);
            coinresult2 = 1;
        }
}
Run Code Online (Sandbox Code Playgroud)

这与按钮的onclick()相关联,该按钮将结果检查给玩家选择

public void checkResult(){
        coinResult1();
        coinResult2();
        coinResult = coinresult1 + coinresult2;
        if (coinResult == playerSelection){
            playerWins();
            buttonsReset();
        }
        else {
            playerLost();
            buttonsReset();
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我唯一的问题是......两台1000台硬币的结果都是这样的... HeadsHeads 54%

HeadsT​​ails 2%

尾巴尾巴44%

1000000次旋转的百分比大致相同

当每个硬币结果被分开计算时

COIN1头部53%尾部47%

COIN2头部48%尾部52%

现在我的朋友说他们的赔率有些不对了......因为HeadsT​​ails不是很高的百分比,他预计每个组合随机接近33%

代码似乎有利于HeadsHeads和TailsTails或HeadsT​​ails .....我已经尝试了几次并且持续获得低百分比的HeadsT​​ails

任何人都可以说明最新情况......还有什么导致HeadsT​​ails很少出来?

希望很快能收到回复

Bat*_*eba 5

您重复实例化Random会破坏生成器的统计属性.

您需要创建一个实例并将其传递给您的函数.更好的是,在课堂上使用一个字段.

关于类的线程安全问题,请参考这个问题Random:Random class thread是否安全?.这似乎表明,你应该synchronizenextInt电话.