随机生成三个整数值并检查它们是否唯一

Random generate three integer values and check if they are unique

首先,我正在生成随机整数值来获取一些要检查的值。

var A1, B2, C3:int;
A1 = Math.random() * 100 + 1;
B2 = Math.random() * 100 + 1;
C3 = Math.random() * 100 + 1;

然后我想检查所有变量是否彼此唯一。

if (!(A1 == B2 || A1 == C3 || B2 == C3)){
        unique = true;
}else{ // Not unique
}

如果变量彼此不唯一,我只想保留 A1 的值,然后更改其他两个变量 B2 和 C3,然后再次检查它们是否唯一。

}else{ // Not unique
            if (unique = false){
                do{
                    B2 = Math.random() * A1 + 1;
                    C3 = Math.random() * A1 + 1;

                    if (!(A1 == B2 || A1 == C3 || B2 == C3)){
                        unique = true;                  
                }while (unique = true)
    }
            trace("Not unique");
    }

我的问题是我无法获得三个唯一值,非常感谢任何有关如何解决此问题的帮助。

在这种情况下,与其要求解决手头的问题,不如先解释一下您正在尝试做什么以及实现它的最佳方法。由于您已经发布了几次,我的猜测是您正在尝试从 0 到 100 的范围内提取 3 个唯一的 int。如果是这种情况,那么您正在尝试创建一种复杂且低效的方法来做到这一点,这很有趣就其本身而言,但离重点还很远。解决办法就是简单的生成一个0到100的int数组,然后随机抽取其中的3个。在那种情况下,它们将始终是唯一的,并且始终从 0 到 100。

var intRange:Array = [];
for(var i:int = 0; i < 100; i++)
{
    intRange.push(i);
}
var index:int = Math.flor(Math.random() * intRange.length);
var a:int = intRange[index];
intRange.splice(index, 1);
index = Math.flor(Math.random() * intRange.length);
var b:int = intRange[index];
intRange.splice(index, 1);
index = Math.flor(Math.random() * intRange.length);
var c:int = intRange[index];
intRange.splice(index, 1);
//3 unique int from 0 to 100 range

你的问题是这里的代码有误:

if (unique = false) { // must be: if (unique == false)
    do {
        ...
    } while (unique = true) // must be: while(unique == false)
}

也可以缩减为

while(!unique) {
    ...
}

此外,您是从 A1 中随机抽取的,而不是 100。错误太多了。正确的代码应该是:

var a:int, b:int, c:int; // also, why would you call variables A1, B2, C3???
a = Math.random() * 100 + 1;
do {
    b = Math.random() * 100 + 1;
while(b == a);
do {
    c = Math.random() * 100 + 1;
} while(c == a || c == b);
// here you have unique

现在,BotMaster 给出的答案是正确且稳健的,但它涉及填充数组并拼接它,这并不总是正确的,特别是如果随机范围明显大于 100,而我们只需要其中的三个值。