如何使用Objective-C制作随机生成器而不重复相同的值两次

时间:2014-07-19 08:40:37

标签: objective-c

嗨,我正在创建一个可以生成随机数的应用。我的问题是如何让它不重复两次相同的数字?

这是我的代码

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;

}

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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

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-loop更优雅。只需在切换之前更换部件:

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

答案 1 :(得分:0)

选择新值时,您实际上并没有从五个中抽出,只有四种可能:禁止使用旧值。

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

// 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];