Java计算指定范围内奇数之和代码存在Bug求排查
帮你排查奇数求和代码的Bug
嘿,我瞅了下你的代码,问题其实挺明显的,咱们一步步来拆解:
第一个核心Bug:循环内过早返回结果
你在sumOdd方法的for循环里,找到第一个奇数后就直接return sum了!这会导致程序只累加第一个符合条件的奇数就立刻结束,根本不会继续遍历后续的数字。比如如果start=1、end=5,你的代码只会返回1,而正确结果应该是1+3+5=9。
第二个问题:范围合法性检查位置错误
你把end >= start && start > 0放在了判断奇数的if条件里,这意味着只有当当前数字是奇数时才会验证范围是否合法。虽然极端情况下可能不会出错,但逻辑上很混乱——范围合法性应该在循环开始前就先检查,如果范围本身无效(比如start比end大,或者start是负数),直接返回-1即可,没必要进入循环做无用功。
修正后的代码
public class SumOddRange { public static boolean isOdd(int number) { // 简化一下判断逻辑,和原来的功能完全一致 return number > 0 && number % 2 != 0; } public static int sumOdd(int start, int end) { // 先检查范围合法性,无效直接返回-1 if (start <= 0 || start > end) { return -1; } int sum = 0; for (int i = start; i <= end; i++) { if (isOdd(i)) { sum += i; } } // 循环结束后再返回累加的总和 return sum; } }
验证一下
比如测试sumOdd(1,5),会累加1、3、5,返回9;测试sumOdd(2,6),累加3、5,返回8;如果传入sumOdd(5,3)或者sumOdd(-1,10),会直接返回-1,完全符合需求。
内容的提问来源于stack exchange,提问作者Verbal
相关产品推荐
相关产品推荐

