3

我需要一种方法来生成 4 个随机定位在数组中的数字。此方法必须能够被多次调用。我在下面尝试的代码似乎正在工作.. 除了每次我调用它时,它都会生成完全相同的数字序列。

在我的头文件中:

NSMutableSet * numberSet;
NSArray * numbers;

代码文件:

    numberSet = [NSMutableSet setWithCapacity:4];
    [self placeRandomLine];
    numbers = [numberSet allObjects];

... using the generated array

    [self placeRandomLine];
    numbers = [numberSet allObjects];

... using the generated array

    [self placeRandomLine];
    numbers = [numberSet allObjects];

... using the generated array

随机方法:

-(void)placeRandomLine
{
    [numberSet removeAllObjects];
    while ([numberSet count] < 4 ) {
        NSNumber * randomNumber = [NSNumber numberWithInt:(arc4random() % 4)];
        [numberSet addObject:randomNumber];
    }
}

我确定我在这里遗漏了一些东西..

谢谢你的帮助!

4

2 回答 2

3

使用有序集:

NSMutableOrderedSet *numberSet = [NSMutableOrderedSet new];
int setSize = 4;
while ([numberSet count] < setSize ) {
    NSNumber * randomNumber = [NSNumber numberWithInt:arc4random_uniform(setSize)];
    [numberSet addObject:randomNumber];
}

NSLog 输出:

numberSet: {(
    2,
    0,
    1,
    3
)}

或者使用数组或任意数字用四个整数
创建一个。 创建一个空的. 用于选择第一个数组中的一个数字,将其删除并将其放入第二个数组中。 对所有四个数字重复。 第二个数组将以随机顺序包含四个数字。NSMutableArray
NSMutableArray
arc4random_uniform()

例子:

NSMutableArray *a0 = [@[@3, @5, @4, @8] mutableCopy];
NSMutableArray *a1 = [NSMutableArray new];
while (a0.count) {
    int randomIndex = arc4random_uniform(a0.count);
    NSNumber *randomValue = a0[randomIndex];
    [a1 addObject:randomValue];
    [a0 removeObject:randomValue];
}   
NSLog(@"a1: %@", a1);

NSLog 输出:

a1: (
    8,
    5,
    3,
    4
)

或者使用有序集

于 2014-01-04T12:50:55.497 回答
2

while ([numberSet count] < 4 )将导致循环运行直到其元素为 0,1,2,3,因为该集合不包含重复的元素。

于 2014-01-04T11:25:54.350 回答