编辑:这个问题解决了。如果您想帮助解决另一个问题,请访问Java Biasing Random Numbers in a Triangular Array。
我正在做一个乘法游戏,所以我选择了 0 到 12 之间的 2 个数字。如果我这样做:
int num1 = (int)(Math.random() * 13);
int num2 = (int)(Math.random() * 13);
方块(0x0、1x1、2x2 等)被挑选了一半(因为 1x2 与 2x1 相同)。如何以相同的频率挑选所有组合?有 91 种可能的组合 (n(n+1)/2)。如果有帮助,这里有一个 13 x 13 的三角形数组:
{{0},
{0,0},
{0,0,0},
{0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0}};
我试过选择第一个数字,并给第二个数字 50% 的机会成为第一个数字。这没有用。我试着给第二个数字 1/91 的机会成为第一个。这导致较小的数字被选择的次数要多得多(大约 7/91 的时间;这是一个平滑的曲线增加)。我想过有一个随机数:int roll = random.next(91)
然后将其拆分为 2 个条目(如坐标 (x,y)),但我不知道如何拆分它。