随机发生器Objective-C

时间:2011-11-25 23:10:37

标签: objective-c random

我已经声明了一个从1到5的整数的静态数组,现在想要每按一个按钮随机调用每个数字。我不希望两次调用相同的号码。

int randomNumber;
static int size = 5;

int position = arc4random() % size - 1;
randomNumber = usedNumbers[position];
int switcher = usedNumbers[size]; // wrong
usedNumbers[position] = usedNumbers[size];
size--;
usedNumbers[position] = switcher;

这是我到目前为止所做的。我的逻辑中有一个漏洞,我可以帮忙。我认为这与切换器有关,该切换器试图保持一个数字,而另一个被删除。

1 个答案:

答案 0 :(得分:2)

如果您只想在每次点击按钮时显示一个随机数,这里有一些可以提供帮助的代码。

但首先,你用来创造这个位置的线是错误的。这样做:

int position = (arc4random() % 5) + 1; // Creates a random number between 1 and 5.
int position = (arc4random() % 5) - 1; // Creates a random number between -1 and 3. 

其次,我建议您使用NSArrayNSMutableArray来保存您的数据。

我假设你有一个按下按钮时调用的方法。在这种方法中你可以简单地写出这样的东西:

int size = 5; // You might want to get the size of your array dynamically, with something like [usedNumbers count];
int position = (arc4random() % size) + 1; // Generates a number between 1-5.
NSNumber *randomNumber = [usedNumbers objectAtIndex:position]; // Here is your random number from the array.

所以..如果你将数组作为实例变量添加到你的类中,你的头文件将如下所示:

@interface MyViewController : UIViewController

@property (nonatomic, retain) NSMutableArray *usedNumbers;

- (IBAction)buttonWasClicked:(id)sender; // Remember to connect it to your button in Interface Builder.

@end

您的实施文件:

@implementation MyViewController

@synthesize usedNumbers;

- (void)viewDidLoad {
    // Initialize your array and add the numbers.
    usedNumbers = [[NSMutableArray alloc] init];
    [usedNumbers addObject:[NSNumber numberWithInt:4]];
    [usedNumbers addObject:[NSNumber numberWithInt:13]];
    // Add as many numbers as you'd like.
}

- (IBAction)buttonWasClicked:(id)sender {
    int size = [usedNumbers count];
    int position = (arc4random() % size); // Generates a number between 0 and 4, instead of 1-5.
    // This is because the indexes in the array starts at 0. So when you have 5 elements, the highest index is 4.
    NSNumber *randomNumber = [usedNumbers objectAtIndex:position]; // The number chosen by the random index (position).
    NSLog(@"Random position: %d", position);
    NSLog(@"Number at that position: %@", randomNumber);
}

@end

如果你这样做,每次点击按钮时,都会从数组中选择一个随机数。

另外,如果您没有启用ARC,请记住release所有对象。

PS:此处还有其他几个问题涉及此主题。记得在询问之前搜索。

<强>更新

要确保每个数字只使用一次,您可以在选择时将其从数组中删除。所以buttonWasClicked:方法将是这样的:

- (IBAction)buttonWasClicked:(id)sender {
    int size = [usedNumbers count];
    if (size > 0) {
        int position = (arc4random() % size);
        NSNumber *randomNumber = [usedNumbers objectAtIndex:position];
        // Do something with your number.
        // Finally, remove it from the array:
        [usedNumbers removeObjectAtIndex:position];
    } else {
        // The array is empty.
    }
}