我已经声明了一个从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;
这是我到目前为止所做的。我的逻辑中有一个漏洞,我可以帮忙。我认为这与切换器有关,该切换器试图保持一个数字,而另一个被删除。
答案 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.
其次,我建议您使用NSArray
或NSMutableArray
来保存您的数据。
我假设你有一个按下按钮时调用的方法。在这种方法中你可以简单地写出这样的东西:
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.
}
}