Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS应始终返回579,但不返回aprox。四分之十的次数不是吗?_Javascript_Random - Fatal编程技术网

Javascript JS应始终返回579,但不返回aprox。四分之十的次数不是吗?

Javascript JS应始终返回579,但不返回aprox。四分之十的次数不是吗?,javascript,random,Javascript,Random,我正在尝试创建一个函数,该函数将始终合计代码中的mx变量: (function () { var i = 0; var j; var mn = 1; var mx = 579; while (i < mx) { j = Math.floor(Math.random() * (mx - mn + 1)) + mn; mx = mx - i; i += j; if (i < (mx

我正在尝试创建一个函数,该函数将始终合计代码中的
mx
变量:

(function () {
    var i = 0;
    var j;
    var mn = 1;
    var mx = 579;

    while (i < mx) {
        j = Math.floor(Math.random() * (mx - mn + 1)) + mn;
        mx = mx - i;
        i += j;

        if (i < (mx - j)) {
            console.log(i);
        } else {
            console.log(mx);
        }
    }
})();
(函数(){
var i=0;
var j;
var-mn=1;
var-mx=579;
而(i
因此,如果
mx=999
,控制台可以记录
900
90
9
,或者如果
mx=50
,控制台可以记录
4
1
10
33
2

这种情况大多数时候都会发生,但我时不时地会得到大于mx的数字,我一辈子都不知道为什么

我将非常感谢任何帮助、指点或指导!因为我想知道哪里出了错,一个解释也会非常棒


谢谢大家!

我不确定我是否正确解释了您的问题,但您似乎想将一个数字“分解”为随机数,这些随机数相加为初始值(
579

如果是这样,我认为你做得有点不正确:你;重新从
max
中减去
i
,然后将
j
添加到
i
。因此,
i
每次都变大

看起来你的算法可以简化

编辑:我又给了它一次机会,这样数字(就我而言)分布更均匀。为了清晰起见,我还重命名了变量:

(function () {
    var total = 0,
        current,
        min = 1,
        max = 579;

    while (total < max) { // while the total has not reached max yet
        current = Math.floor(Math.random() * (max - min + 1)) + min;

        if(total + current > max) { // if total would become too high
            current = max - total;  // set current such that total becomes max
        }

        total += current;

        console.log(current);
    }
})();
(函数(){
var总计=0,
现在的
最小值=1,
max=579;
while(总数<最大值){//while总数尚未达到最大值
当前=数学地板(数学随机()*(最大-最小+1))+min;
如果(总电流+电流>最大值){//如果总电流过高
current=max-total;//设置current,使total变为max
}
总+=电流;
console.log(当前);
}
})();

虽然在循环开始时
i
,但一旦您将
j
添加到循环中,就不一定是这样了。这就是为什么你有时会写一个
i
的值,这个值比你原来的
mx

要大,我明天早上试试这个!明天早上我会试试这个,但这个解决方案行吗:如果我们的最大值是50,第一个随机数是12,那么剩下38。如果第二个随机数是32,我们剩下6个。如果第三个随机数是12,我们丢弃它,使用剩下的6,这将是我们开始使用的最大值50。我不希望随机数每次都变小,比如,如果我们要分解这个数,我不希望每个循环的每次中断都变小。@Jonathon David Oates:是的,这就是它的作用。最后你确实得到了相对较多的小数字。有时间我会换的。如果可以的话,那太好了!谢谢相关:,