While 循环条件与 if 语句

While Loop condition with an if statement

提问人:Mỹ Trần 提问时间:8/13/2023 最后编辑:MureinikMỹ Trần 更新时间:8/13/2023 访问量:30

问:

问题:定义一个函数 fizzBuzz(max),该函数接受一个数字并打印从 0 到 max(不包括)的每个数字,该数字可被 3 整除。

对于上面的问题,我不确定为什么当我使用下面的循环时它不起作用,但我需要添加另一个条件语句。whileif

不起作用

let i=0;
while (i<max && i%3===0) {
    console.log (i);
    i++;
} 

工程

let i=0;
while (i<max) {
    if (i%3===0) {
        console.log (i);
    }
    i++;
}
javascript if-statement while-循环

评论

3赞 Andy 8/13/2023
题外话:你还没有创建一个函数,这是问题要求你做的第一件事。FizzBuzz
2赞 trincot 8/13/2023
给定的条件指示循环何时应继续循环。中的条件不能确定循环是否继续。即使条件为 false,循环仍然可以进行另一次迭代。另一方面,当条件为 false 时,循环退出。whileififwhile
0赞 James 8/13/2023
有两个不相关的条件 - i 小于 max(继续)和 i 是 3 的倍数(显示它)。

答:

1赞 Mureinik 8/13/2023 #1

您提供的两个代码段并不等同。一旦不满足循环的条件,循环就会终止。因此,在第一个片段中,打印出来后,循环的条件将计算 ,找到条件为 (since is , not ),并终止循环。在第二个片段中,循环继续迭代,直到等于 ,并且其中的条件负责确定是否需要打印。while01false1%310imaxifi

旁注 #1:既然你知道是可以被整除的,你可以逐步递增,只得到所有可整除的数字,而不是检查中间的所有数字:
0333

let i = 0;
while (i < max) {
    console.log (i);
    i += 3;
}

旁注 #2:这可能是一个风格问题,但由于循环主体对条件的唯一影响是固定增量,因此循环感觉更合适,至少对我来说是这样:
ifor

for (let i = 0; i < max; i += 3) {
    console.log(i);
}
0赞 Alexander Nenashev 8/13/2023 #2

您的循环不起作用,因为它在 since 和 is 时中断。i === 11%3 !== 0i<max && i%3===0false

第二个代码片段解决了这个问题。

还有一个选项是使用函数式的单行代码并生成一个假数组并打印其索引乘以:3

const max = 40;

Array.from({length: Math.ceil(max / 3)}, (_, i) => console.log(i * 3));