我在制作一个以随机顺序调用每个案例的IBAction时遇到问题 我做了很多搜索,但没有找到解决这个问题的好方法。 我到目前为止的代码是
-(IBAction) random {
int text = rand() % 5;
switch (text) {
case 0:
textview.text = @"1";
break;
case 1:
textview.text = @"2";
break;
case 2:
textview.text = @"3";
break;
case 3:
textview.text = @"4";
break;
case 4:
textview.text = @"5";
break;
default:
break;
}
}
它运作正常,但就像我说的那样,我只想让它每次调用一次 任何帮助将不胜感激。
答案 0 :(得分:2)
将选项NSNumber
放在NSMutableArray
中,选择一个随机索引,显示它,然后将其从数组中删除......如果计数到达时还有其他响应怎么办?零。
答案 1 :(得分:2)
由于您尝试设置随机文本,我会这样做:
添加一个名为stringsArray的iVar并在init上初始化它:
...
stringsArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
...
您的IBAction将如下所示:
-(IBAction) random {
if([stringsArray count] == 0) return;
int text = rand() % [stringsArray count];
[textView setText:[stringsArray objectAtIndex:text];
[stringsArray removeObjectAtIndex:text];
}
答案 2 :(得分:0)
使用 srand 代替 rand 功能
或者更好地使用
int text = arc4random()%5;
答案 3 :(得分:0)
嗯,不管怎样,你需要保留一张记分卡"并跳过已选择的选项。记分卡可以是位图(例如,设置位的简单整数),布尔数组,先前选择的数字列表等。
最直接的编码方法是将上面逻辑的主体置于UNTIL循环中,并在选择随机数后检查循环,看看它是否已被选中。如果是这样,请循环迭代,否则设置您的响应,填写相应的"选中标记"在你的记分卡中,并离开循环。
但是请注意:循环还必须包括检查是否已经选择了所有选项,并在这种情况下以适当的指示退出。