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

时间:2015-02-19 14:04:03

标签: actionscript-3 random

首先,我生成随机整数值以获取要检查的值。

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");
    }

我的问题是我无法获得三个独特的价值观,我对如何解决这个问题的任何帮助表示高度赞赏。

2 个答案:

答案 0 :(得分:0)

在这种情况下,您可能应该首先解释您尝试做什么以及实现目标的最佳方式,而不是要求解决手头的问题。由于你已经发布了几次,我的猜测是你试图从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

答案 1 :(得分:0)

你的问题是错误的代码:

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且我们只需要三个值。