javascript - 在while循环中检查数字的因子时获得无限循环
问题描述
我正在努力infinite loop
解决需要使用 Java Script 功能方式完成的数组练习实现的问题:我有一个代码,它创建一个数组并用满足条件的数字填充它的值:
Each array element has a value,
which we draw from the range <100, 200> until the sum of digits is
a number having exactly two dividers, not counting 1 and this one
numbers.
我有如下代码:
const generateNumber = (min, max) =>
Math.floor(Math.random() * (max - min + 1)) + Math.floor(min);
const unities = number => number % 10;
const hundreds = number => Math.floor((number % 1000) / 100);
const tens = number => Math.floor((number % 100) / 10);
const sumDigits = (number) => unities(number) + hundreds(number) + tens(number);
const countNumberFactors = number => Array
.from(Array(number + 1), (_, i) => i)
.filter(i => number % i === 0)
.slice(1, -1)
.length;
const generateNumberUntilConditionNotAchieve = (min, max) => {
let number = generateNumber(min, max);
const digitsSum = sumDigits(number);
while (countNumberFactors(digitsSum) === 2) {
number = generateNumber(min, max)
}
return number;
}
const generateArray = (minArrSize, maxArrSize, minItemValue, maxItemValue) =>
Array(generateNumber(minArrSize, maxArrSize))
.fill(0)
.map(
() => generateNumberUntilConditionNotAchieve(minItemValue,
maxItemValue));
const main = () => {
const generatedArray = generateArray(1, 5, 100, 200);
console.log("Array -> " + generatedArray);
}
main();
对于较小minArraySize
的maxArraySize
值,有时我会收到理想的结果,但对于像 <10, 100> 这样的参数,我的 IDE 会冻结。在粘贴了上述代码的在线编辑器上,我在线收到有关无限循环的信息:
while (countNumberFactors(digitsSum) === 2)
我试图通过反复试验来调查根本原因,但我没有找到解决方案。infinite loop
对于如何解决上述问题的建议,我将不胜感激。
解决方案
您正在更改number
但正在检查digitsSum
. 解决此问题所需要做的就是digitsSum = sumDigits(number)
在 while 循环中添加。例如
const generateNumberUntilConditionNotAchieve = (min, max) => {
let number = generateNumber(min, max);
const digitsSum = sumDigits(number);
while (countNumberFactors(digitsSum) === 2) {
number = generateNumber(min, max);
digitsSum = sumDigits(number);
}
return number;
}
推荐阅读
- sql - Netezza:如何为该人找到 LATEST 连续期间的 MIN 和 MAX
- javascript - jQuery - 触发器(“点击”)在 e.preventDefault() 之后不起作用
- amazon-web-services - 基于内存预留的 AWS ECS 扩展
- mysql - 如何将外键约束导入 InnoDB 表
- c# - 表单 2 与 ListBox 值传递在 Form4 标签“帮助我”
- python - 由于 TypeError,无法在 iPad 的 Pythonista3 上安装 Pymongo
- xdebug - PHPUnit 给出没有代码覆盖驱动程序可用
- css - 使用对象位置移动图像一些像素
- python - Python将字符串写入CSV而不引用
- php - 如何在主索引文件路径之外链接资产文件夹