ios - 使用 arc4random 的更好方法

标签 ios objective-c xcode random arc4random

我有一个随机方法来创建 2 个随机整数。我担心的是 %65-%70 的输出是相同的整数,例如“5-5”“4-4”“3-3”。

-(void)random{
NSUInteger randomNumber = arc4random_uniform(5);

    switch (randomNumber) {
        case 0:
            _tile2.image = [UIImage imageNamed:@"one.png"];
            break;

        case 1:
            _tile2.image = [UIImage imageNamed:@"two.png"];
            break;

        case 2:
            _tile2.image = [UIImage imageNamed:@"three.png"];
            break;

        case 3:
            _tile2.image = [UIImage imageNamed:@"four.png"];
            break;

        case 4:
            _tile2.image = [UIImage imageNamed:@"five.png"];
            break;
    }

    NSUInteger randomNumber2 = arc4random_uniform(5);

    switch (randomNumber2) {
        case 0:
            _tile3.image = [UIImage imageNamed:@"one.png"];
            break;

        case 1:
            _tile3.image = [UIImage imageNamed:@"two.png"];
            break;

        case 2:
            _tile3.image = [UIImage imageNamed:@"three.png"];
            break;

        case 3:
            _tile3.image = [UIImage imageNamed:@"four.png"];
            break;

        case 4:
            _tile3.image = [UIImage imageNamed:@"five.png"];
            break;
    }
}

我应该创建 25 个不同的案例以获得更好的结果吗?

NSUInteger randomNumber = arc4random_uniform(25);

   switch (randomNumber) {
        case 0:
            _tile2.image = [UIImage imageNamed:@"one.png"];
            _tile3.image = [UIImage imageNamed:@"one.png"];
            break;

        case 1:
            _tile2.image = [UIImage imageNamed:@"one.png"];
            _tile3.image = [UIImage imageNamed:@"two.png"];
            break;

        case 2:
            _tile2.image = [UIImage imageNamed:@"one.png"];
            _tile3.image = [UIImage imageNamed:@"three.png"];
            break;

        case 3:
            _tile2.image = [UIImage imageNamed:@"one.png"];
            _tile3.image = [UIImage imageNamed:@"four.png"];
            break;

        case 4:
            _tile2.image = [UIImage imageNamed:@"one.png"];
            _tile3.image = [UIImage imageNamed:@"five.png"];
            break;

        case 5:
            _tile2.image = [UIImage imageNamed:@"two.png"];
            _tile3.image = [UIImage imageNamed:@"one.png"];
            break;

        ...
    }
}

arc4random_uniform 非常适合获取一个随机整数。当我需要获得 2 个或更多随机数时,输出并不是那么好。这样做的最佳方法是什么?

最佳答案

对不起,我不相信你。你一定在做一些与你所展示的不同的事情。粘贴到 Playground 中的以下代码始终给出 20% 左右的匹配度,而不是您声称的 65-70%:

import Cocoa

let sampleSize = 1000
var count = 0
for i in 1...sampleSize {
  var randomNumber1 = arc4random_uniform(5)
  var randomNumber2 = arc4random_uniform(5)
  if randomNumber1 == randomNumber2 {
    ++count
  }
}
println( Double(count) / Double(sampleSize) )

无论您遇到什么问题,都与 arc4random_uniform 如何生成值对无关。

关于ios - 使用 arc4random 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27922601/

相关文章:

html - iOS 8 网络应用程序的启动图像

ios - 如何将用户默认的一个 TextView 中的数据保存到另一个 TextView 而不删除以前的数据?

ios - Firebase登录系统

objective-c - 在 iOS 上使用 UISwitches 作为单选按钮

ios - iPad SplitViewController - 使用 iPhone Storyboard ViewController

c# - 在 Xcode 中创建 C/C++ 库并将其导入到 C# .NET Core 中

ios - Swift:删除影响或 Hook UIView 的约束?

ios - 如何更改 UIButton : The signup button in Parse`s PFLoginViewController 的颜色

objective-c - 计算返回 0 Objective-c

ios - 货币数字的格式