编辑:发现了一个错误。更新了错误的测试用例
我有一个程序,它掷五个骰子,并分配一手牌给掷骰子。 即什么都没有,一对,两对,三种,满屋子,四种,五种。该代码运行 1000000 次,并为每次滚动提供感知机会。下面我附加了我的代码应该在附近输出的一般百分比:
Case 1, None alike, is 0.092533
Case 2, One pair, is 0.462799
Case 3, Two pair, is 0.231789
Case 4, Three of a kind, is 0.154192
Case 5, Full house, is 0.038595
Case 6, Four of a kind, is 0.019316
Case 7, Five of a kind, is 0.000776
但是我的代码给出了以下输出:
Case 1, None alike is 7.57E-4
Case 2, One pair is 0.019422
Case 3, Two pair is 0.270331
Case 4, Three of a kind is 0.153657
Case 5, Full House is 0.270331
Case 6, Four of a kind is 0.019422
Case 7, Five of a kind is7.57E-4
我不明白为什么我的程序百分比如此偏离。它们甚至加起来都不是一个。我已经通过并测试了我的逻辑,但从我所看到的来看,这是合理的。我希望有另一双眼睛看一看,让我知道他们是否能抓住一些东西。下面是我的代码:
你看到这个说法了吗?
else if (rolled [i] == 5) {
six++;
}
在你的计数方法中? 它可能会导致问题。
编辑:
您没有打印正确的变量。 我已经指出了不正确的那些。
System.out.println("Case 1, None alike is "+fivep); <---- should be 'none'
System.out.println("Case 2, One pair is "+fourp); <---- should be 'pair'
System.out.println("Case 3, Two pair is "+full); <---- should be 'twop'
System.out.println("Case 4, Three of a kind is "+threep);
System.out.println("Case 5, Full House is "+full);
System.out.println("Case 6, Four of a kind is "+fourp);
System.out.println("Case 7, Five of a kind is"+fivep);
一旦我进行了更改,您的概率就非常接近预期。
你有没有考虑过java.lang.Math.random((方法返回一个大于或等于0.0且小于1.0的伪随机(双精度(?使用java.security.SecureRandom对象来实现此目的怎么样?一个建议:
import java.security.SecureRandom
// ...
secureRandom = new SecureRandom();
// ...
for (int i = 0; i<=1000000; i++)
{
int [] rolls = new int[5];
rolls[0] = secureRandom.nextInt(6) + 1; // secureRandom.nextInt(6) picks a number from the set {0, 1, 2, 3, 4, 5} at random
rolls[1] = secureRandom.nextInt(6) + 1;
// ...