Java实现FizzBuzz时仅当数字被5整除才输出fizz的BUG求助
问题原因
你的代码中,else分支和判断是否被5整除的if绑定,只要数字不满足被5整除的条件,不管之前是否已经拼接了fizz,都会直接把word覆盖为当前数字的字符串形式。
比如数字3:满足被3整除的条件时word被赋值为fizz,随后判断是否被5整除不成立,触发else分支把word覆盖为"3",最终输出数字而不是fizz。只有当数字同时满足被5整除的条件时,才不会触发else覆盖逻辑,之前拼接的fizz才能保留,这和你遇到的错误现象完全吻合。
修复方案
将else分支的覆盖逻辑,改为判断word是否为空(即没有匹配到任何整除规则)时,再赋值为数字字符串即可,修复后代码如下:
public List<String> fizzBuzz(int n) { List<String> result = new ArrayList<>(); for (int i = 1; i <= n; i++) { String word = ""; if (i % 3 == 0) { word += "fizz"; } if (i % 5 == 0) { word += "buzz"; } // 仅当没有匹配到任何规则时,使用数字 if (word.isEmpty()) { word = String.valueOf(i); } result.add(word); } return result; }
内容的提问来源于stack exchange,提问作者user11915382
相关产品推荐
相关产品推荐

