mardi 13 janvier 2015

Better way of using arc4random

I have a random method to create 2 random integers. My concern is that %65-%70 of outputs are same integers like "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;
}
}


Should i create 25 different case to reach better result?



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 is great for getting one random integer. When i need to get 2 or more random numbers, the outputs are not that great. What is the best way of doing this?





Aucun commentaire:

Enregistrer un commentaire