function randomRange(start, stop) {
var low = Math.ceil(low);
var high = Math.floor(high);
return Math.floor(Math.random() * (high - low + 1)) + min;
}
function randomTester() {
var start = parseInt(prompt("Enter lower part of range:"));
var stop = parseInt(prompt("Enter upper part of range:"));
alert("A random number in that range: " + randomRange(start, stop));
}
我试图在两个随机数的上限和下限范围内显示一个随机数,这两个随机数在最小值和最大值都是唯一的。
答案 0 :(得分:1)
函数randomRange
的参数是start
和stop
,但您使用的是low
和high
以及min
已定义。
function randomRange(start, stop) {
var low= Math.ceil(low);
// ^^^^^
var high= Math.floor(high);
// ^^^^^^
return Math.floor(Math.random() * (high - low + 1)) + min ;
// ^^^^^
}
试试这个:
function randomRange(start, stop) {
var low= Math.ceil(start);
// ^^^^^^^
var high= Math.floor(stop);
// ^^^^^^
return Math.floor(Math.random() * (high - low + 1)) + low ;
// ^^^^^
}
为什么首先使用这些变量,我认为这就足够了:
function randomRange(start, stop) {
return Math.floor(Math.random() * (stop - start)) + start;
}
答案 1 :(得分:0)
您当前拥有的内容会创建一个上下限范围。如果要确保两者都是互斥的,则必须执行以下操作:
return Math.floor(Math.random() * (high - low - 1)) + min + 1;
对此进行逻辑思考。您从一个较低的范围(包含范围)和一个较高的范围(范围排除)开始。通过从比例乘数(高-低)中减去1,此代码将建立较小范围的域(高-低-1)。此操作将保持较低范围的包含范围(因为比例乘数不会影响较低范围,因为在发生移位之前范围始终从0开始),并将较高范围更改为比原来更大的范围。这提供了将域向右移动1的机会,这将导致较低的范围变为排他性(向右移动时,较低的范围会截断数字0,从而获得排他性),而较高的范围会变为从开始的地方返回,这是排他的。 在数学上,这可以这样表示,假设(高-低),或者我们的比例乘数是10:
0 <= x < 1
9(0 <= x < 1) //our scale multiplier was subtracted by 1
0 <= 9x < 9
(0 <= 9x < 9) + 1 //we now shift the entire domain by 1
1 <= 9x + 1 < 10 //which is exclusive on both ends, but we can simplify it
0 < 9x + 1 < 10 //which is exactly what we were looking for: the upper range (10) is excluded, as is the lower range (0).