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:是的,这就是它的作用。最后你确实得到了相对较多的小数字。有时间我会换的。如果可以的话,那太好了!谢谢相关:,