简体   繁体   中英

Random number in iOS?

How do you generate a random number when a button is clicked, and depending on that number, different actions take place.

I probably only need a random number from 1-10.

-(IBAction)buttonClicked{

"generate the random number"

if(number == 1){

    something happens
}

else if(number == 2){
    something else happens
}

etc

}

There are a few problems with rand() which there are loads of posts about and they recommend that you use arc4random() instead. This function is seeded automatically and has a 'better' algorithm for number generation.

int myNumber = arc4random() % 10

This would mean that myNumber would be between 0-9.

So in your case you want:

int number = (arc4random() % 2) + 1;

which would give you a range of 1-2.

And please, please, if you are generating a random number from 1 to 10... use switch rather than a pile of if {} else if {} clauses:

switch (arc4random() % 10){
case 0:
   //blah blah
   break;
case 1:
   //blah blah
   break;
//etc etc
}

由于obj-c是c语言的超集,因此您可以自由使用rand函数

If you need a cryptographically secure random number you may use:

int SecRandomCopyBytes (
   SecRandomRef rnd,
   size_t count,
   uint8_t *bytes
);

as described here .

I have had good success with arc4random() - just modulus it to set a range. For instance:

arc4random() % 100;

I would actively avoid using rand() as it does not produce truly random numbers and it needs to be seeded.

NSArray *arr=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10", nil];
    NSMutableArray *valueArray=[[NSMutableArray alloc]init];
    int  count=0;
    while(count<5)
    {
        int rand= arc4random()%10;
        NSLog(@"%d",rand);

        NSString *str=[arr objectAtIndex:rand];
        if(![valueArray containsObject:str])
        {
        [valueArray addObject:str];
         count++;
        } 
    }
    NSLog(@"%@",valueArray);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM