Java实现CodingBat的FizzBuzz时if分支仅最后一个生效问题
FizzBuzz代码问题排查
问题根因
你的代码出现该问题是由两个逻辑错误共同导致的:
- 三个
if为独立判断,无互斥关系:即使前面的if条件命中完成赋值,后面的if判断仍会执行,覆盖掉之前的赋值结果 - 末尾的
else仅和最近的第三个if(判断3的倍数)绑定:只要第三个if未命中,无论前两个if是否命中,都会执行else逻辑覆盖赋值
错误复现示例
以同时为3和5倍数的数字15为例:
- 第一个
if命中,赋值为"FizzBuzz" - 第二个判断5的倍数的
if命中,覆盖赋值为"Buzz" - 第三个判断3的倍数的
if命中,覆盖赋值为"Fizz" - 第三个
if已命中,不执行else,最终得到错误结果"Fizz"
以仅为5倍数的数字5为例:
- 第一个
if未命中,无赋值 - 第二个
if命中,赋值为"Buzz" - 第三个
if未命中,触发else,覆盖赋值为"5",最终结果错误
修复方案
将独立if改为else if,让所有判断分支互斥,同时优先判断同时为3和5倍数的情况:
public String[] fizzBuzz(int start, int end) { int n = end - start; String[] array = new String[n]; for (int i = 0; i < n; i++) { int num = start + i; if (num % 3 == 0 && num % 5 == 0) { array[i] = "FizzBuzz"; } else if (num % 5 == 0) { array[i] = "Buzz"; } else if (num % 3 == 0) { array[i] = "Fizz"; } else { array[i] = String.valueOf(num); } } return array; }
内容的提问来源于stack exchange,提问作者Sapunaru Teodor
相关产品推荐
相关产品推荐

