由于某种原因,以下代码无效。
var a1 = Math.floor(Math.random()*4+1);
//Answer2
for(a2 = 0; a2 != a1 && a2 != 0; a2 = Math.floor(Math.random()*4+1)){
alert(a2);
}
我试图让“a2”成为1-4中的int但不等同于“a1”。
怎么了? 在此先感谢!!!
编辑:
谢谢大家的帮助! 这是我的最终结果:
var a1, a2;
a1 = Math.floor(Math.random()*4+1);
a2 = a1;
while(a2 == a1){
a2 = Math.floor(Math.random() * 3 + 1);
alert(a2);
}
答案 0 :(得分:2)
尝试使用此功能。它会以随机顺序为您提供一个数字从1到max
的数组。然后,您可以使用它为变量赋值,并且它永远不会重复:
编辑:我找到了一种纯粹的功能性方法:
function randomRange(min, max) {
return (new Array(++max-min))
.join('.').split('.')
.map(function(v,i){ return min+i })
.sort(function(){ return 0|Math.random()*max });
}
console.log(rand(1,4)); //-> [4,2,1,3] random array from 1 to 4
var arr = rand(1,4);
var a = arr[0];
var b = arr[1];
...
编辑2 :如上所述,某些浏览器存在问题,请查看Random but just in Chrome以获得更好的解决方案。
演示: http://jsbin.com/ohohum/1/edit(多次运行以查看随机性)
答案 1 :(得分:1)
如果数字大于或等于您要排除的数字,只需添加一个:
var a2 = Math.floor(Math.random() * 3 + 1);
if(a2 >= a1) {
a2++;
}
答案 2 :(得分:1)
当a2
与a2
相同或为零时,您选择新的a1
值。这是向后的 - 你在循环之前将a2
设置为零,因此它永远不会执行。
当a2
为零或等于a1
时,您需要循环播放:
var a1 = Math.floor(Math.random()*4+1);
//Answer2
for(a2 = 0; a2 == a1 || a2 == 0; a2 = Math.floor(Math.random()*4+1)){
// nothing here
}
alert(a2);
答案 3 :(得分:0)
有两种标准方法可以做这种事情。我正在考虑一个稍微更通用的框架,但
创建基础值数组以从
中进行选择var values = [1,2,3,4]
删除您不感兴趣的值
values = Array.filter( values, function(x) { return x!=a1; } )
从列表中随机选择一个值
var a2 = values[Math.floor(Math.random()*values.length)];
创建值数组以选择
var values = [1,2,3,4]
随机选择一个值并重试,直至成功
var a2 = values[Math.floor(Math.random()*values.length)];
while( a2==a1 )
{
a2 = values[Math.floor(Math.random()*values.length)];
}
如果我们将n
视为初始列表的长度,并将m
视为已删除元素的数量,则过滤后的版本会进行n
比较以构建已过滤的列表长度n-m
,但只生成一个随机数。相比之下,拒绝方法进行平均n/(n-m)
比较和随机数生成。