关于随机数,我陷入了一个问题。我使用arc4random()
生成随机数。我想先生成0-9之间的randome数字。所以我正在使用:
int RandomNumber = arc4random() % 9;
好的。现在假设我得到8.我不希望我的新随机数为8.所以我做了以下事情:
NSMutableArray *aryTemp = [NSMutableArray new];
for (int i = 0; i < [aryTemp Count] < 9; i++) {
int RandomNumber;
do {
RandomNumber = arc4random() % 9;
}
while ([aryTemp containsObject:[NSNumber numberWithInt:RandomNumber]])
[aryTemp addObject:[NSNumber numberWithInt:RandomNumber]];
}
所以我生成一个随机数,而不是将它添加到数组中,而不是检查下一个随机数是否是之前生成的随机数?如果不是将其添加到数组中。
它适用于少数起始数字,但是当我离开的时候选项很少,我产生欲望随机数的机会很少,而循环过程由于冗余随机数而需要很多时间。
我在找什么我想要随机数0,1,2,3,4,5,6,7,8,9 如果我下次第一次得到6,那么随机数必须在这些数字中只有0,1,2,3,4,5,7,8,9
答案 0 :(得分:2)
编辑:上面评论中链接的answer提出了一个更优雅的解决方案 - 将阵列改组到位,尽管它使用与我天真的方法相同的原理:)
如果我理解正确:您想要随机选择0-9范围内的所有项目。
我最初的做法是创建一个包含该范围内所有项目的包。每次随机选择一个项目 - 将其从包中取出,这样就不会再次选择它了。
以下代码段应该实现此目的:
int randomNumber;
// Fill remainingNumbers array with numbers 0-9
NSMutableArray *remainingNumbers = [NSMutableArray array];
for (int i = 0; i < 10; i++) {
[remainingNumbers addObject:[NSNumber numberWithInt:i]];
}
// Create tempNumbers array to store our random numbers in
NSMutableArray *tempNumbers = [NSMutableArray array];
for (int i = 0; i < 9; i++) {
// Create a random number in the range of the indexs for remainingNumbers array
int maxIndex = [remainingNumbers count] -1;
randomNumber = arc4random() % maxIndex;
// Add random number to tempNumbers array
[tempNumbers addObject:[remainingNumbers objectAtIndex:randomNumber]];
// Remove the number from the remaining numbers so we don't add duplicates
[remainingNumbers removeObjectAtIndex:randomNumber];
}
// Add final number
[tempNumbers addObject:[remainingNumbers objectAtIndex:0]];
// Print the array of 'randomly selected numbers'
NSLog(@"The array is: %@", tempNumbers);
答案 1 :(得分:0)
尝试这个
//call method
int tempvalue = (int) [self randomFloatBetween:0 secondParam:9]; // pass number as per your need
-(float) randomFloatBetween:(int) smallNumber secondParam:(float) bigNumber
{
float diff = bigNumber - smallNumber;
return (((float) rand() / RAND_MAX) * diff)
+ smallNumber;
}
希望这有帮助,谢谢。
谢谢。快乐的编码