【问题标题】:How to make a random generator without repeating the same value twice with Objective-C如何使用Objective-C制作随机生成器而不重复相同的值两次
【发布时间】:2014-07-19 08:40:37
【问题描述】:

您好,我正在制作一个会生成随机数的应用。我的问题是如何让它不重复相同的数字两次?

这是我的代码

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;

}

感谢您的帮助!

【问题讨论】:

标签: objective-c


【解决方案1】:

将您的新随机值与当前值进行比较。如果它相似,只需创建一个新的随机值,直到它不同:

int text = rand()  % 5;
while (text == [textView.text intValue]) {
    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;
}

此外,使用 do-while 循环更优雅。只需在切换前更换零件:

int text;
do {
    text = rand() % 5;
} while (text == [textViewtext intValue]);

【讨论】:

    【解决方案2】:

    在选择新值时,您实际上没有抽出五个但只有四种可能性:禁止旧值。

    这样做并调整结果以始终忽略旧值:

    // get the current value
    int oldNumber = [textView.text intValue] - 1;
    
    // pick a new value
    int randomNumber = rand() % 4;
    
    // adjust new value to avoid the old value
    if (randomNumber >= oldNumber)
        randomNumber += 1;
    
    // set the new value on the textView
    textView.text = [@(randomNumber + 1) stringValue];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 2015-07-12
      相关资源
      最近更新 更多