//Generates a random number but doesn't allow the same number be repeated
for (int i = 0; i < questions1.length; i++)
{
//random number
int r = (int)(Math.random() * i);
temp = index[r];
index[r] = index[i];
index[i] = temp;
}
我如何让它特别支持1号?
答案 0 :(得分:4)
例如,如果你想要一个介于1-6之间的随机数,但想要选择3的可能性是其他任何数字的两倍,那么一个非常简单的解决方案就是创建一个包含7个索引的数组。 1,2,4,5,6都各有一个索引。 3持有两个指数。现在选择0到6之间的随机数,并返回该索引中的任何数字。
使用这种方法,您可以为任何数字范围提供您想要的任何权重。
几乎可以肯定更优雅的解决方案,但这将完成工作。
答案 1 :(得分:2)
你可以建立一个List
并用你想要的比例填充你想要的数字。然后使用Collections.shuffle。
public void test() {
// Throw 1 twice as likely and 6 3 times as likely as the other numbers.
List dice = Arrays.asList(1,1,2,3,4,5,6,6,6);
Collections.shuffle(dice);
}
答案 2 :(得分:0)
假设您的目标范围是[0,6],并且您给出的概率是可能性的两倍。我会给你两种方法,不会忘记你的记忆: