可能重复:
Generating random numbers in Objective-C
iOS Random Numbers in a range
Generate non-repeating, no sequential numbers
我正在寻找能给出两个数字之间随机数的方法,第一个数字是我在数字之间选择的数字。
例如,如果我给这个随机函数5和10和9作为第一个数字,那么它会给我:9,10,7,6,5,8
我试图使用它:
NSUInteger count = [array count];
for (NSUInteger i = 1; i < count; ++i) {
int nElements = count - i;
int n = (random() % nElements) + i;
while (n==`firstnumber`) {
n = (random() % nElements) + i;
}
}
答案 0 :(得分:4)
int r = arc4random() % 9 + 5
会为您提供5到13之间的数字,包括两者。
答案 1 :(得分:3)
第一个数字由我设定,其他数字由方法设定,和 每个号码只显示一次
看起来你正在使用一个改组算法。 NSMutableArray
上的以下类别将完成此任务:
@interface NSMutableArray (Shuffling)
- (void)shuffle;
@end
@implementation NSMutableArray (Shuffling)
- (void)shuffle
{
// Fisher–Yates shuffle (modern algorithm)
// To shuffle an array a of n elements (indexes 0..n-1):
// for i from n − 1 downto 1 do
// j <-- random integer with 0 <= j <= i
// exchange a[j] and a[i]
// http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
for (int i = [self count] - 1; i >= 1; i--) {
int j = arc4random() % (i + 1);
[self exchangeObjectAtIndex:j withObjectAtIndex:i];
}
}
@end
您的要求是数组第一个位置的数字是固定的(由您给出)。然后,你可以这样做:
使用minValue
和maxValue
之间的所有数字(包括两者)填充数组,但firstValue
除外。
随机播放阵列。
将firstValue
插入数组的第一个位置。
导致以下代码:
NSInteger minValue = 5;
NSInteger maxValue = 10;
NSInteger firstValue = 9;
// minValue <= firstValue <= maxValue
// populate the array with all numbers between minValue
// and maxValue (both included) except for firstValue
NSMutableArray *ary = [NSMutableArray array];
for (int i = minValue; i < firstValue; i++) {
[ary addObject:[NSNumber numberWithInt:i]];
}
for (int i = firstValue + 1; i <= maxValue; i++) {
[ary addObject:[NSNumber numberWithInt:i]];
}
// --> (5,6,7,8,10)
// shuffle the array using the category method above
[ary shuffle];
// insert firstValue at the first position in the array
[ary insertObject:[NSNumber numberWithInt:firstValue] atIndex:0];
// --> (9,x,x,x,x,x)