嗨,我正在尝试创建一个基于随机数的数组,该数组的总数始终为100。当有2或3行时,我可以让它工作,但如果有4行,我就不能让它工作。这意味着我需要改变中间部分。以下是我编写的简单代码:(长度是数组中的行数)
var array = []
var length = 3; //4 , 5 , 6 ...
var number;
var calculate;
var totalProcessed;
for (i = 0; i < length; i++) {
// FIRST ONE
if(i == 0){
number = Math.floor(Math.random() * 100) + 1;
console.log(number);
totalProcessed = number;
array.push(number)
}
// MIDDLE SECTION
if(i > 0 && i == length-1){
if(length > 2){
calculate = 100 - number;
number = Math.floor(Math.random() * calculate) + 1
totalProcessed = totalProcessed + number;
console.log(number);
array.push(number)
}
}
// LAST ONE
if(i == length -1){
var lastOne = 100-totalProcessed;
console.log(lastOne);
array.push(lastOne)
}
}
console.log(array);
我应该如何更改中间部分才能捕捉数字?
此代码中有两个错误:
第一个:
您应该将==
更改为<
,以便能够循环3次以上:
if(i > 0 && i == length-1)
第二:
我认为你的错误发生在以下几行。您可以从上一个生成的数字100中减去数字。相反,你应该从剩下的所有东西中生成一个随机数:
calculate = 100 - number;
所以我认为你应该减去totalProcessed值。
calculate = 100 - totalProcessed;
完整的工作片段:
var array = []
var length = 5; //4 , 5 , 6 ...
var number;
var calculate;
var totalProcessed;
for (i = 0; i < length; i++) {
// FIRST ONE
if(i == 0){
number = Math.floor(Math.random() * 100) + 1;
console.log(number);
totalProcessed = number;
array.push(number)
}
// MIDDLE SECTION
if(i > 0 && i < length-1){
if(length > 2){
calculate = 100 - totalProcessed;
number = Math.floor(Math.random() * calculate) + 1
totalProcessed = totalProcessed + number;
console.log(number);
array.push(number)
}
}
// LAST ONE
if(i == length -1){
var lastOne = 100-totalProcessed;
console.log(lastOne);
array.push(lastOne)
}
}
console.log(array);
let total = 0;
array.forEach(el => total += el)
console.log(total)
您应该替换=="在中间部分的if语句中<";。
我发现你的方法有点难以理解。问题设置是否与代码试图执行的操作相同?因此,我写了一个替代例子来解决这个问题(正如目前所解释的):
let limit = 100;
const numbers = [...Array(limit)].map(() => {
const random = Math.floor(Math.random() * 100) + 1;
if (limit - random > 0) {
limit -= random;
return random;
}
return null;
}).concat(limit).filter((num) => num)
console.log(numbers);
它经历了100次迭代(以防只有1:D),然后降低限制。若下一个随机数符合极限,它将被添加到结果中,否则它将为null。
如果在100次迭代后,仍然有剩余的限制,则将其连接到现有数组。最后我们过滤掉所有的";null";(不符合限制的数字)瞧。