随机IBAction,只选择每个案例一次

时间:2011-07-26 16:23:06

标签: iphone objective-c xcode random switch-statement

我在制作一个以随机顺序调用每个案例的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;  
    }      
}

它运作正常,但就像我说的那样,我只想让它每次调用一次 任何帮助将不胜感激。

4 个答案:

答案 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循环中,并在选择随机数后检查循环,看看它是否已被选中。如果是这样,请循环迭代,否则设置您的响应,填写相应的"选中标记"在你的记分卡中,并离开循环。

但是请注意:循环还必须包括检查是否已经选择了所有选项,并在这种情况下以适当的指示退出。