下限和上限的随机数

时间:2017-02-26 02:25:00

标签: javascript

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

我试图在两个随机数的上限和下限范围内显示一个随机数,这两个随机数在最小值和最大值都是唯一的。

2 个答案:

答案 0 :(得分:1)

函数randomRange的参数是startstop,但您使用的是lowhigh以及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).