随机生成三个整数值并检查它们是否唯一
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,而我们只需要其中的三个值。
首先,我正在生成随机整数值来获取一些要检查的值。
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,而我们只需要其中的三个值。