尝试创建一段代码,返回 1000 以下且为三的倍数的所有数字。这是相关的代码段。
<script>
var i = 1;
var mplesOf3 = [0];
var myNum = 0;
while (myNum < 1000){
(3 * i) = myNum;
mplesOf3.push(myNum);
i++;
};
alert(mplesOf3);
</script>
代码在 html 页面中运行,因此有样式标签和警报。
代码基本上尝试执行 3x1 然后 3x2 然后 3x3 等等,直到结果超过 1000。我几天前就提出了这个概念,但我仍然不确定为什么它不能正常运行。
根据记录,我已经看到了如何执行此操作的其他解决方案,但因为我正在学习并想要改进,所以我想知道为什么这个解决方案不起作用。
提前谢谢
编辑:我应该知道这个错误是愚蠢的。我在伪代码上写了 (3 x 1) = n 但没有发现错误,因为我觉得没有什么问题。感谢各方,我会尽可能接受答复。
最佳答案
您的 JavaScript 引擎应该告诉您有语法错误(如果您使用的是浏览器,请查看 Web 控制台)。您不能使用类似 (3 * i)
的表达式在作业的左侧。在 JavaScript 中,=
右边的东西被评估,并分配给左边的东西。
您的算法也会导致 1002 被推送,因为您没有测试设置 myNum = 3 * i
的结果直到插入后。
坚持原来的算法,但修复这两件事:
var i = 1;
var mplesOf3 = [0];
var myNum;
while ((myNum = 3 * i) < 1000){
mplesOf3.push(myNum);
i++;
} // Note: No semicolon here, you don't put semicolons after blocks
// attached to control-flow statements
console.log(mplesOf3);
这一点:
while ((myNum = 3 * i) < 1000){
评估3 * i
,将结果赋给 myNum
,然后检查该值是否为 <
1000。
也就是说,使用 for
可能会更简单(更少的变量,更少的乘法)和myNum += 3
在增量部分:
var mplesOf3 = [0];
var myNum;
for (var myNum = 3; myNum < 1000; myNum += 3) {
mplesOf3.push(myNum);
}
console.log(mplesOf3);
也没有特别好的理由对 0
进行特殊处理。像这样,所以我可能最初会将其排除在数组之外并从 0
开始计数:
var mplesOf3 = [];
var myNum;
for (var myNum = 0; myNum < 1000; myNum += 3) {
mplesOf3.push(myNum);
}
console.log(mplesOf3);
关于JavaScript。循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52932008/