• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Objective-C 中的非重复随机数

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:43:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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



Best Answer-推荐答案


您可以使用 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;
}

关于ios - Objective-C 中的非重复随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370643/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap