多年来,我一直在为我的iPhone应用程序尝试让非重复arc4random_uniform正常工作。我已经在stackoverflow上看过了所有与此相关的问题和答案,但没有运气,现在我希望有人能帮助我。我想做的是在1到104之间选择13个不同的随机数。我已经让它工作到选择了13个不同的数字,但有时其中两个是相同的。
int rand = arc4random_uniform(104);这就是我要做的,然后我使用rand从数组中进行选择。如果打乱数组,然后从顶部选择13更容易,那么我会尝试这样做,但我需要帮助才能做到这一点,因为这似乎更难。
感谢您的建议。
发布于 2012-04-20 01:40:19
不能保证ar4random_uniform()不会重演。想一想--您要求它产生一个介于0和103之间的数字。如果你这样做了105次,它别无选择,只能重复之前的一个选择。该函数如何知道您将请求一个数字的次数?
你将不得不检查你已经得到的数字列表,如果是重复的,请求一个新的数字,或者对数组进行混洗。对于这一点,应该有许多问题。这里有一个最古老的:What's the Best Way to Shuffle an NSMutableArray?。
关于不重复的随机数也有很多问题:https://stackoverflow.com/search?q=%5Bobjc%5D+non-repeating+random+numbers
发布于 2014-07-23 05:21:57
您可以创建一个NSMutableSet并像这样实现它:
NSMutableArray* numbers = [[NSMutableArray alloc] initWithCapacity: 13];
NSMutableSet* usedValues = [[NSMutableSet alloc] initWithCapacity: 13];
for (int i = 0; i < 13; i++) {
int randomNum = arc4random_uniform(104);
while ([usedValues containsObject: [NSNumber numberWithInt: randomNum]) {
randomNum = arc4random_uniform(104)
}
[[usedValues addObject: [NSNumber numberWithInt: randomNum];
[numbers addObject: [[NSNumber numberWithInt: randomNum];
}发布于 2013-05-29 07:59:38
或者,你也可以创建一个包含105个整数的可变数组,每个整数都是唯一的一个,然后arc4random_uniform(arrayname count),然后从数组中删除相同的数,然后每次都会得到一个不重复的随机整数(尽管数组越小,就越容易预测下一个数字,只是简单的概率)
https://stackoverflow.com/questions/10233517
复制相似问题