我主要是Java头,我想要一种生成0到74之间的伪随机数的方法.在Java中我会使用这个方法:
Random.nextInt(74)
Run Code Online (Sandbox Code Playgroud)
我对种子或真正随机性的讨论不感兴趣,只是你如何在Objective-C中完成相同的任务.我搜索谷歌,似乎有很多不同的和相互矛盾的信息.
我已经看到这个问题了很多但从未见过真正的具体答案.所以我将在这里发布一个,希望能帮助人们理解为什么在使用随机数生成器时会出现"模数偏差",就像rand()在C++中一样.
有没有一种规范的方法可以在Objective C中随机化一个数组?
我正在尝试创建一个可以随机化并限制为某个x个字符串的字符串数组.
如果数组可以随机化,我可以选择前x个字符串,这样可以正常工作.
我正在尝试使用这样的代码
NSString *statements[9];
statements[0] = @"hello";
Run Code Online (Sandbox Code Playgroud)
这似乎有效但阵列似乎充满了垃圾数据.
有人可以帮我正确的方向.(内存分配是以错误的方式完成的吗?
谢谢
我一直在使用arc4random()和arc4random_uniform(),我总觉得它们不是完全随机的,例如,我是从一个数组中随机选择值,但是当我生成它们时,经常出现的值是相同的连续多次,所以今天我认为我会使用Xcode游乐场来看看这些函数是如何表现的,所以我首先测试arc4random_uniform来生成0到4之间的数字,所以我使用了这个算法:
import Cocoa
var number = 0
for i in 1...20 {
number = Int(arc4random_uniform(5))
}
Run Code Online (Sandbox Code Playgroud)
我跑了几次,这里是大多数时候价值观的变化:

因此,您可以看到值重复增加和减少,并且一旦值处于最大值/最小值,它们通常会在特定时间内保持不变(请参阅第5步中的第一个屏幕截图,值在6期间保持为3)步骤,问题是它一点都不寻常,在我的测试中,函数实际上大部分时间都是这样.
现在,如果我们看一下arc4random(),它基本上是一样的:

所以这是我的问题:
谢谢.
编辑:
最后,我做了两个令人惊讶的实验,第一个带有真正的骰子:

让我感到惊讶的是,我不会说它是随机的,因为我看到了与arc4random()和arc4random_uniform()所描述的非随机相同的模式,所以Jean-BaptisteYunès指出,人类不好看,数字序列是否真的是随机的.
我还想做一个更"科学"的实验,所以我做了这个算法:
import Foundation
var appeared = [0,0,0,0,0,0,0,0,0,0,0]
var numberOfGenerations = 1000
for _ in 1...numberOfGenerations {
let randomNumber = Int(arc4random_uniform(11))
appeared[randomNumber]++
}
for (number,numberOfTimes) in enumerate(appeared) {
println("\(number) appeard \(numberOfTimes) times (\(Double(numberOfGenerations)/Double(numberOfTimes))%)")
}
Run Code Online (Sandbox Code Playgroud)
要查看每个数字出现的次数,并且有效地数字是随机生成的,例如,这里是控制台的一个输出:
0出现99次.
1次出现了97次.
2次出现了78次.
3次出现了80次.
4次出现了87次.
5次出现107次.
6次出现了86次.
7次出现了97次.
8次出现了100次.
9次出现91次. …
我为iphone/iPad开发应用程序.我想要对存储在NSArray中的对象进行洗牌.有没有办法用objective-c来实现它?
如何从0到4生成随机整数,以便连续两次生成相同的数字?例如,如果3是第一次生成的数字,则0,1,2,4将是第二次随机生成的可能数字.如果第二次产生2,那么0,1,3,4将是第三次随机产生的可能数字,依此类推.
我想创建一个函数数组,以便我可以随机化这些数组发生的顺序.我可以这样做:
NSMutableArray *MyArray = [NSMutableArray arrayWithObjects: function1, function2, function3, nil];
Run Code Online (Sandbox Code Playgroud)
如果我可以做这样的事情那么;
RandomNum = arc4random() %([MyArray count]);
MyArray[RandomNum];
Run Code Online (Sandbox Code Playgroud)
这样随机化调用这些函数的顺序?如何将函数存储在此数组中?
我正在撰写一些文章,旨在通过使用与扑克相关的主题来教授开始编程概念.目前,我正在研究洗牌问题.
正如Jeff Atwood在CodingHorror.com上指出的那样,一个简单的改组方法(迭代数组并用阵列中其他地方的随机卡交换每个卡)会产生不均匀的排列分布.在实际应用中,我会使用Knuth Fisher-Yates shuffle来获得更均匀的随机性.但是,我不想用更少编码器友好的算法来解释编程概念.
这就产生了一个问题:如果黑帽子知道你正在使用52张牌的天真洗牌,那么黑帽子有多大的优势呢?看起来它会无限小.
我一直试图让非重复的arc4random_uniform现在为我的iPhone应用程序工作多年.关于stackoverflow的所有问题和答案都没有运气,现在我希望有人可以帮助我.我想要做的是选择1到104之间的13个不同的随机数.我已经让它工作到它选择13个不同的数字,但有时两个是相同的.
int rand = arc4random_uniform(104);
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的事情,然后我使用rand从数组中进行选择.如果更容易改组阵列,然后从顶部选择13,那么我会尝试,但我需要帮助如何,因为这似乎更难.
感谢任何建议.
objective-c ×6
random ×6
iphone ×3
ios ×2
algorithm ×1
arc4random ×1
arrays ×1
c++ ×1
cocoa ×1
cocoa-touch ×1
darwin ×1
function ×1
ipad ×1
modulo ×1
nsarray ×1
probability ×1
shuffle ×1
swift ×1
xcode ×1