我有一个简单的代码可以生成随机数
SecureRandom random = new SecureRandom();
...
public int getRandomNumber(int maxValue) {
return random.nextInt(maxValue);
}
上面的方法被调用大约10次(不是循环的)。我想确保所有数字都是唯一的(假设maxValue > 1000
)。
我可以确定每次呼叫都会得到唯一的号码吗?如果没有,我该如何解决?
编辑:我可能已经含糊其词了。我想避免手动检查,如果我真的有唯一的数字,所以我想知道是否有更好的解决方案。
有多种方法可以实现这一目标,哪种方法更合适,取决于您需要从多少个数字中选择。
令m为到目前为止我选择的随机数
对于i = 1至10,000,000
生成0-1范围内的随机(浮点)数r
如果(r <(100,000-m)/(10,000,000-i)),则将i添加到列表中并递增m
随机排列列表,然后根据需要从列表中顺序选择数字
但是很明显,如果您需要选择整个数字范围中相当大的一部分,那么选择后者就没有多大意义了。如果要选择1到10亿范围内的10个数字,那么当您仅通过检查重复项来生成十亿个随机数时,您实际上就不太可能获得重复项,而最终只能生成10个随机数数字。
如何在1到9之间生成9个随机数,而不重复,一个接一个。它类似于:假设生成的第一个随机数是4,那么下一个随机数必须在[1,9]{4}中。我的第一种方法是将每个随机生成的数字添加到一个集合中,从而避免重复。但在更糟糕的情况下,比如我们已经生成了6个数字,我们必须再生成3个数字,这个过程会有点慢。当范围从[1,9]更改为[1,1000]时,这种方法听起来不正确。有人能提出一个替代方法吗。
我正在寻找一个有效的机制随机顺序的列表与警告重复的项目必须有至少9项之间他们如果长度的列表允许否则他们必须尽可能远的距离列表的长度将允许。 首先,这只适用于小数据集,列表中的项目永远不会超过150个,可能只有1个。 因此,基本前提是: 列出可能包含几个重复名称的人名列表(通常,任何给定名称的实例不会超过2个,但在特殊情况下可能有3个) 第3部分是棘手的一点,我没有任何关于系统如何确保间距正确的业务
问题内容: 我对Swift和编程逻辑很陌生,所以请耐心等待 如何在Swift中生成0到9之间的随机数而不重复最后生成的数字?因为相同的数字不会连续出现两次。 问题答案: 将先前生成的数字存储在变量中,然后将生成的数字与先前的数字进行比较。如果它们匹配,则生成一个新的随机数。重复生成新数字,直到它们不匹配为止。
问题内容: 这就是我在1到6之间生成唯一编号并从drawable文件夹中获取适当图像的方式。 我想要的是,我必须调用此方法7次,并且每次此方法应返回唯一的随机数。因此,所有已选择的数字都不会再次出现。 问题答案: 解决此类问题的常用方法是创建一个包含每个可能值的列表,并对其进行混洗(使用Collections.shuffle)。然后,每当您需要一个值时,便从列表中消费一项。这将确保您不会多次使用相
问题内容: 当他每次运行程序时都不断获得相同的数字时,我试图向Java解释随机数生成器。我为同一件事创建了自己的简单版本,每次运行该程序时,我也得到了与他得到的确切数字相同的数字。 我究竟做错了什么? 100个数字中的最后五个数字是: 问题答案: 您已经为随机数生成器提供了恒定的值。它是确定性的,因此每次运行都会生成相同的值。 我不确定您为什么选择使用作为种子,但是种子值与生成的值范围无关(这是由
我的CompSci课程有一个作业,我们正在做,我们必须打印出一副二维的卡片,6行8列的数组。每个“卡”基本上是随机生成的数字(1-12)和随机选择的套装(钻石、红桃、黑桃、,