我有一个随机方法来创建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个或更多的随机数时,输出并不是那么好。做这件事的最好方法是什么?
发布于 2015-01-14 03:35:29
抱歉,我不相信你。你一定是在做其他事情,而不是你所展示的。以下粘贴到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如何生成值对的问题。
发布于 2015-01-14 00:31:57
使用数字数组对您来说是一种解决方案吗?您可以有一个可变的数字数组`@0,@1,@2,@3,@4,并从随机索引中检索一个数字
NSMutableArray *array = [NSMutableArray arrayWithObjects:@0, @1, @2, @3, @4];
NSInteger firstIndex = arc4random_uniform([array count]);
NSNumber *firstNumber = array[index];删除您刚刚找到的号码:
[array removeObjectAtIndex:firstIndex];然后对第二个数字重复相同的步骤。第一个检索到的数字将不再在数组中,所以即使arc4random_uniform()为您提供相同的值( 65-70%的大小写),您将在切换大小写中使用的实际数字也会有所不同。
这种方法可能有点笨拙,但我认为它做了你需要的事情,让你对随机性有一点控制。
https://stackoverflow.com/questions/27922601
复制相似问题