You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现CodingBat的FizzBuzz时if分支仅最后一个生效问题

FizzBuzz代码问题排查

问题根因

你的代码出现该问题是由两个逻辑错误共同导致的:

  • 三个if为独立判断,无互斥关系:即使前面的if条件命中完成赋值,后面的if判断仍会执行,覆盖掉之前的赋值结果
  • 末尾的else仅和最近的第三个if(判断3的倍数)绑定:只要第三个if未命中,无论前两个if是否命中,都会执行else逻辑覆盖赋值

错误复现示例

以同时为3和5倍数的数字15为例:

  1. 第一个if命中,赋值为"FizzBuzz"
  2. 第二个判断5的倍数的if命中,覆盖赋值为"Buzz"
  3. 第三个判断3的倍数的if命中,覆盖赋值为"Fizz"
  4. 第三个if已命中,不执行else,最终得到错误结果"Fizz"

以仅为5倍数的数字5为例:

  1. 第一个if未命中,无赋值
  2. 第二个if命中,赋值为"Buzz"
  3. 第三个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:06:03