ios 产生一个随机不重复数字 xcode obj c 求助

想做一个随机不重复数字generator,就是每按一下按钮就产生一个数字,但是数字不重复,直到所有数字都被按过一遍。
我用的这个code:
-(IBAction)button:(id)sender{

NSInteger m;

do{

m=arc4random()%3;

}while(!repeated);
}
明显不能用!repeated 但是我又想表示当这次的数字跟上次不一样的时候。。。
最新回答
爷是那么黑

2024-06-26 00:03:46

按你的描述和代码,应该是有一组已知的数待抽取,就像是一组扑克牌每次抽取一张直到抽取完成。

就此,建议使用洗牌算法将已知数字排序,然后按顺序每次取出一个数字则达到你的目的了。

下面是洗牌算法其中一种实现

NSArray *list0 = @[@1,@2,@3,@4,@5,@6,@7,@8,@9];
NSMutableArray *list = [NSMutableArray arrayWithArray:list0];
        
for (int i = 0; i < list.count; ++i) {
    NSInteger x = arc4random() % list.count;
    id tmp = list[i];
    list[i] = list[x];
    list[x] = tmp;
}

如果你还是想用原来的思路,那么可以定义一个数组,每次 arc4random() % list.count 生成索引,然后取出这个索引的值,并从队列中删除这个索引。

-(IBAction)button:(id)sender{
    NSInteger m; 
    
    NSInteger x = arc4random() % list.count; // list 是全局的一个数组
    NSInteger value = list[x];  // 这次得到的值。
    [list removeObjectAtIndex:x]; // 删除后,下次 list.count 显然就少一个了。
}