Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 将随机整数赋值给数组中的项,summa应该是一个固定的数字_Javascript_Arrays_Random_Int - Fatal编程技术网

Javascript 将随机整数赋值给数组中的项,summa应该是一个固定的数字

Javascript 将随机整数赋值给数组中的项,summa应该是一个固定的数字,javascript,arrays,random,int,Javascript,Arrays,Random,Int,这是我的问题 我在一个数组中有数量可变的项 array (x, y, z, ..., n) 我给一个变量分配了一个固定的总数 $min_int = 0; $max_int = 8; $total = 8; 我需要为数组中的每个项目分配一个从$min_int到$max_int的随机整数,数组中的项目总数必须始终为=8 例如: array (red, green, blue); $min_int = 0; $max_int = 8; $total = 8; 结果可能是 Array (

这是我的问题

我在一个数组中有数量可变的项

array (x, y, z, ..., n)
我给一个变量分配了一个固定的总数

$min_int = 0;
$max_int = 8;
$total = 8;
我需要为数组中的每个项目分配一个从$min_int到$max_int的随机整数,数组中的项目总数必须始终为=8

例如:

array (red, green, blue);
$min_int = 0;
$max_int = 8;
$total = 8;
结果可能是

Array
(
    [0] => 3
    [1] => 5
    [2] => 0
)

我会用javascript开发

有什么建议吗

这是我必须用随机整数填充的表的一部分。
选中客户机的复选框和要填充的天数列,循环必须在所选日期为所选客户机生成随机整数,总数必须为=8列总和,因此对于您选择的每一天。

我最直观的猜测是

var max_int = 8;
var first = Math.floor(Math.random() * max_int) + 1;
var second = Math.floor(Math.random() * (max_int - first)) + 1;
var third = max_int - first - second;

但这里可能存在一些数学上的偏见。我不是数学家,所以这是对任何懂统计学的人的邀请,请他们仔细看看这个。不过,这也行得通,因为如果将第一、第二和第三项相加,最后总是得到max_int。

此解决方案应该满足您的要求:

var $min_int = 0;
var $max_int = 8;
var $total = 8;

var array = new Array(3);
var sum = 0;
var currentMax = $max_int;

for (i = 0; i < array.length; i++) {
    if ((i !== (array.length - 1)) && (currentMax > 0)) {
        var randomNum = parseInt(Math.random() * currentMax);
        array[i] = randomNum;
        currentMax -= randomNum;
    }
    else {
        array[i] = currentMax;
    }
}

console.log(array);
对于var阵列=新阵列5

对于var阵列=新阵列8


数组中是否只有三个元素?在[$min,min$total,$max]范围内选择一个随机数,将其分配给第一个元素。从$total中减去这个。对下一个元素重复此操作,依此类推。或者按相反顺序:取总数,然后根据需要从中减去random0,total。要获得可能赋值的最大变化,请查找整数分区算法。选择一个随机分区并用0填充剩余值。数组中的项可能是可变的。你能帮我举个例子吗。有人想参加吗这里,这是我刚才建议的一个功能完整的版本:无法进入协作JSFIDLE,所以我自己尝试了:只需单击随机按钮,它就会工作。请注意,我在第一次尝试时犯了一个小错误:计算第二个变量时不应该有+1。这会导致第三个变为-1。它看起来很完美!!:D但如果我要使用数组PYou必须将整个内容放在for循环中,并让for循环在您的文档中创建许多包含这些值的元素。给我一点时间,我也许可以把一些东西放在一起。更新JSFiddle:这里的问题是最后一个元素总是包含剩余值的元素,但是您可以通过例如在之后洗牌数组的元素来解决这个问题。此外,如果你把数组做得太长,那么组合的数量似乎是有限的,但这也是统计学家要分析的:pIt太棒了!我认为你的解决方案可能是最好的。但是在数组8的情况下,数组中最新的元素的值通常为0。如何解决?在数组中选择一个随机项并赋值怎么样?这正是我要做的。我需要填充表格,选择客户机和日期,函数必须用随机整数填充列和行,这是因为潜在的数字组通常会变小,因为总数必须加到8。如果在早期选择较大的数字,那么在以后的阵列构建过程中只能选择较小的数字。有了array8,它就更加引人注目了,因为有太多的数组元素需要加在一起才能得到这么小的数目。好的是,有一个很好的洗牌功能,您可以使用它来混合结果,如下所示:
var $min_int = 0;
var $max_int = 8;
var $total = 8;

var array = new Array(3);
var sum = 0;
var currentMax = $max_int;

for (i = 0; i < array.length; i++) {
    if ((i !== (array.length - 1)) && (currentMax > 0)) {
        var randomNum = parseInt(Math.random() * currentMax);
        array[i] = randomNum;
        currentMax -= randomNum;
    }
    else {
        array[i] = currentMax;
    }
}

console.log(array);
[3, 3, 2]
[0, 2, 6]
[8, 0, 0]
[1, 4, 3]
[0, 4, 4]
[4, 0, 1, 0, 3]
[7, 1, 0, 0, 0]
[1, 2, 0, 4, 1]
[3, 4, 1, 0, 0]
[4, 3, 0, 0, 1]
[7, 0, 1, 0, 0, 0, 0, 0]
[3, 2, 3, 0, 0, 0, 0, 0]
[5, 3, 0, 0, 0, 0, 0, 0]
[2, 4, 1, 0, 1, 0, 0, 0]
[7, 0, 1, 0, 0, 0, 0, 0]