我有这行代码来计算随机数:
myRand = arc4random()%24; //0:23
最有效的添加方式是什么,以便不会生成之前生成的相同数字。
我并没有试图改变所有24个,因为我想要重复,最好不要直接相同的数字中的2个...
我想分别存储前一个号码,然后比较它,如果匹配,只需再做一次,但是如果例如相同的号码连续出现3次我就无法弄清楚...不太可能我知道,但它是可能的。
感谢。
答案 0 :(得分:2)
在ivar中保留对先前生成的数字的引用。
NSInteger lastRandom;
并将其初始化为-1
。
然后,当您想要一个新的随机数时,您可以执行以下操作:
NSInteger newRandom;
do {
newRandom = arc4random_uniform(24);
while (newRandom != lastRandom);
lastRandom = newRandom;
这个小循环将确保您的新随机数与您生成的最后一个不同。
答案 1 :(得分:0)
你正在寻找的东西就像一张卡片随机播放:你希望24个值按照随机顺序出现,就像你想要在牌组出现后从牌组中拿出来的牌所以它不会#&# 39;再次上来(直到你重新洗牌)。
iOS 9及更高版本中的GameplayKit为这样的随机化任务提供了实用程序。特别是,这个由GKShuffledDistribution
类解决:
id<GKRandom> dist = [GKShuffledDistribution distributionForDieWithSideCount:24];
myRand = [dist nextInt];
这个不会重复,直到所有24个值都用完为止。
更一般地说,使用GKRandom
(等)代替arc4random
(等)可以为您提供多种控制游戏中随机行为的选项:确保不同的随机游戏系统不会影响彼此,确保您可以重复某些随机序列进行测试,或者在客户端和服务器之间,制作遵循特定模式的随机数,等等。