【问题标题】:A random IBAction that only chooses each case once只选择每个案例一次的随机 IBAction
【发布时间】:2011-07-26 16:23:05
【问题描述】:

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

它工作正常,但就像我说的,我只希望它调用每个案例一次。
任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    由于您尝试设置随机文本,我会这样做:

    添加一个名为 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】:

      如何将选项作为NSNumbers 放入NSMutableArray 中,选择一个随机索引,显示它,然后将其从数组中删除...如果计数达到零,还有其他一些响应。

      【讨论】:

        【解决方案3】:

        使用 srand 代替 rand 函数

        最好还是用

        int text = arc4random() % 5;

        【讨论】:

          【解决方案4】:

          好吧,您需要以一种或另一种方式保留“记分卡”并跳过已选择的选项。记分卡可以是位图(例如,您设置位的简单整数)、布尔数组、先前选择的数字列表等。

          最直接的编码方法是将上面的逻辑主体放在一个 UNTIL 循环中,并在选择随机数后检查循环,看看它是否已经被选择。如果是这样,请在循环中进行迭代,否则设置您的响应,在记分卡中填写适当的“复选标记”,然后离开循环。

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

          【讨论】:

            猜你喜欢
            • 2020-07-26
            • 2014-09-09
            • 2018-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多