FizzBuzz函数逻辑异常:输出顺序与结果不符求助
问题排查与修正
核心逻辑错误点
- 循环范围偏差:当前循环
for (let i = 0; i < n; i++)仅遍历0到n-1(比如n=7时是0-6),但预期输出包含7,需调整循环条件为i <= n以覆盖到目标数值。 - 条件判断逻辑混乱:
- 多个独立
if语句会让符合多条件的数值被多次推入数组(比如i=0时,会依次push"Fizz"、"Buzz"、"FizzBuzz"),但每个数值应仅对应数组中的一个元素。 - 同时是3和5倍数的判断优先级错误,未放在最前面,导致无法触发"FizzBuzz"的输出逻辑。
- 多个独立
- 分支绑定错误:当前
else仅与最后一个“同时是3和5倍数”的if绑定,导致只要不是15的倍数,都会执行push(i),哪怕已经推入了Fizz或Buzz,造成重复添加。
修正后的代码
function fizzbuzz(n) { let arr = []; // 按预期输出遍历0到n(包含n) for (let i = 0; i <= n; i++) { let item = i; // 默认值为当前数字 if (i % 3 === 0 && i % 5 === 0) { item = "FizzBuzz"; } else if (i % 3 === 0) { item = "Fizz"; } else if (i % 5 === 0) { item = "Buzz"; } arr.push(item); } return arr; }
验证结果
调用fizzbuzz(7)时,输出为:
[0, 1, 2, "Fizz", 4, "Buzz", "Fizz", 7]
完全符合预期。
额外说明
如果实际需求是生成1到n的序列(而非0到n),只需将循环起始值改为1,结束条件保持i <= n,此时调用fizzbuzz(7)会输出:
[1, 2, "Fizz", 4, "Buzz", "Fizz", 7]
内容的提问来源于stack exchange,提问作者solo1999
相关产品推荐
相关产品推荐

