首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用arc4random的更好方法

使用arc4random的更好方法
EN

Stack Overflow用户
提问于 2015-01-13 20:49:09
回答 2查看 248关注 0票数 0

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

代码语言:javascript
复制
-(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个不同的案例以达到更好的结果吗?

代码语言:javascript
复制
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个或更多的随机数时,输出并不是那么好。做这件事的最好方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2015-01-14 03:35:29

抱歉,我不相信你。你一定是在做其他事情,而不是你所展示的。以下粘贴到Playground中的代码始终提供约20%的匹配率,而不是您声称的65-70%:

代码语言:javascript
复制
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如何生成值对的问题。

票数 1
EN

Stack Overflow用户

发布于 2015-01-14 00:31:57

使用数字数组对您来说是一种解决方案吗?您可以有一个可变的数字数组`@0,@1,@2,@3,@4,并从随机索引中检索一个数字

代码语言:javascript
复制
NSMutableArray *array = [NSMutableArray arrayWithObjects:@0, @1, @2, @3, @4];
NSInteger firstIndex = arc4random_uniform([array count]);
NSNumber *firstNumber = array[index];

删除您刚刚找到的号码:

代码语言:javascript
复制
[array removeObjectAtIndex:firstIndex];

然后对第二个数字重复相同的步骤。第一个检索到的数字将不再在数组中,所以即使arc4random_uniform()为您提供相同的值( 65-70%的大小写),您将在切换大小写中使用的实际数字也会有所不同。

这种方法可能有点笨拙,但我认为它做了你需要的事情,让你对随机性有一点控制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27922601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档