Objective-C中的非重复随机数

时间:2013-10-14 23:03:21

标签: ios objective-c random unique generator

我在互联网上搜索过,但我找不到任何直截了当的答案。我想要开发的基本上是一个三个同对象匹配游戏。我在一行中有3个UIButton。 (这3个按钮中的每一个都有一个黑帽图标)。这将是3种独特类型的帽子。每行有3行,每行3个。我想触摸第一个帽子并显示0到2之间的数字(假设为1)。在选择第一个帽子之后,我希望第二个帽子在2个剩余数字之间生成一个数字(选项是0和2,假设2)。最后,当我触摸第三个帽子时,它将生成最后一个余数(在这个例子中为0)。选择数字的主要原因是因为我想要一个特定的数字代表一个独特的“帽子”,所以当我选择一个数字1的帽子,一个蓝色的帽子将弹出,数字0一个红帽等...我已经实现了整个动画和东西。我只是在“独特的随机数选择”中苦苦挣扎。我确信数组将成为“随机逻辑”的一部分,但我还没有设法正确实现它...任何帮助都会非常感激:)谢谢大家!

2 个答案:

答案 0 :(得分:3)

你可以编写一个方法,通过arc4random和一个可变数组属性来实现这一点,该属性存储已显示为NSNumber对象的数字。

-(NSInteger) randomNumberZeroToTwo {
     NSInteger randomNumber = (NSInteger) arc4random_uniform(3); // picks between 0 and n-1 where n is 3 in this case, so it will return a result between 0 and 2
     if ([self.mutableArrayContainingNumbers containsObject: [NSNumber numberWithInteger:randomNumber]])
         [self randomNumberZeroToTwo] // call the method again and get a new object
     } else {
       // end case, it doesn't contain it so you have a number you can use
       [self.mutableArrayContainingNumbers addObject: [NSNumber numberWithInteger:randomNumber]];
       return randomNumber;
    }
 }

arc4random返回一个NSUInteger,因此您必须强制转换它以避免使用NSNumber发出警告。

还要确保通过添加此代码来实例化可变数组,以便在调用self.mutableArrayContainingNumbers时自动执行此操作(即延迟实例化)。

-(NSMutableArray *) mutableArrayContainingNumbers
{
    if (!_mutableArrayContainingNumbers)
        _mutableArrayContainingNumbers = [[NSMutableArray alloc] init];

    return _mutableArrayContainingNumbers;
}

答案 1 :(得分:1)

有一系列可选数字。

pickable = @[0,1,2]; //Use NSNumbers but you get the idea.

/*Code to generate random number (rNum) with the range of 0-([pickable count]-1)*/
/*
   Assign the number to your hat
   and then remove that object from pickable
*/

[pickable removeObjectAtIndex:rNum]
and loop over that until [pickable count] == 0;

我希望这能给你带来好运。