FizzBuzz代码在HackerRank测试全部失败,求排查
FizzBuzz问题排查与修复
核心错误分析
- 判断对象错误:循环中始终用输入的
n做取余判断,而非当前循环变量i。比如n=15时,循环会执行16次,每次都判断15是否是3和5的倍数,导致数组里重复添加FizzBuzz,完全不符合题目遍历1到n每个数的要求。 - 全局数组未清空:
results是全局变量,多次调用函数时会累积之前的结果,导致输出混乱。 - 输入输出不符合HackerRank要求:HackerRank不支持
prompt获取输入,需要通过标准输入读取;同时题目通常要求逐行输出结果,而非打印整个数组。
修正后的代码
function fizzBuzz(n) { const results = []; // 改为函数内局部变量,避免结果累积 for (let i = 1; i <= n; i++) { // 从1开始,匹配题目1到n的范围要求 if (i % 3 === 0 && i % 5 === 0) { results.push('FizzBuzz'); } else if (i % 3 === 0) { results.push('Fizz'); } else if (i % 5 === 0) { results.push('Buzz'); } else { results.push(i.toString()); // 转为字符串,符合HackerRank输出格式 } } // 逐行输出,适配HackerRank的输出要求 results.forEach(item => console.log(item)); } // HackerRank环境下的输入处理逻辑 function main() { const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }); readline.question('', (input) => { const n = parseInt(input.trim(), 10); fizzBuzz(n); readline.close(); }); } main();
关键修改说明
- 把
results改为函数内部局部变量,每次调用都会重新初始化,避免旧结果干扰。 - 循环判断从
n替换为当前循环变量i,确保每个数字都被正确检查。 - 循环起始值从
0改为1,匹配FizzBuzz题目的常规数字范围(1到n)。 - 将数字转为字符串存入数组,符合HackerRank的输出格式要求。
- 替换
prompt为HackerRank支持的readline模块读取输入,同时改为逐行输出结果,而非打印整个数组。
内容的提问来源于stack exchange,提问作者seriously
相关产品推荐
相关产品推荐

