为什么我的FizzBuzz循环满足条件就停止?仅执行一次如何修复
问题核心原因
- 循环内提前触发return:匹配到第一个符合条件的数字(15)时直接
return message退出整个方法,循环直接终止,不会遍历后续数字。 - 未处理公倍数场景:先判断是否为3的倍数,匹配后直接赋值返回,不会再校验是否同时为5的倍数,也没有拼接两个标识的逻辑。
- 结果未做累加:每次匹配到符合条件的数字都会覆盖
message变量,无法保存所有数字的匹配结果。 - 参数校验逻辑错误:仅当起始数字小于结束数字时才进入循环,若起止数字相等且符合匹配条件会直接返回空。
修复后完整代码
class Program { static void Main(string[] args) { Console.WriteLine(FizzBuzz(15, 22)); } static string FizzBuzz(int première, int dernière) { string message = ""; // 调整参数校验逻辑,起止相等时也正常执行 if (première <= dernière) { while (première <= dernière) { string currentResult = ""; // 优先拼接3的倍数标识,再拼接5的倍数标识,自动适配公倍数场景 if (EstDivisiblePar3(première)) { currentResult += "Fizz"; } if (EstDivisiblePar5(première)) { currentResult += "Buzz"; } // 仅符合条件的内容追加到最终结果 if (!string.IsNullOrEmpty(currentResult)) { message += $"{première}: {currentResult}\n"; } première++; } } else { message = "« Incohérence des paramètres de FizzBuzz »."; } // 所有数字遍历完成后统一返回结果 return message; } static bool EstDivisiblePar3(int num) { return (num % 3) == 0; } static bool EstDivisiblePar5(int num) { return (num % 5) == 0; } }
输出结果示例
15: FizzBuzz 18: Fizz 20: Buzz 21: Fizz
内容的提问来源于stack exchange,提问作者Nicholas Spektor
相关产品推荐
相关产品推荐

