试图计算给定范围内的奇数之和(java) - 代码中的错误?

时间:2018-05-31 13:45:26

标签: java sum

我正在接受Udemy课程,我遇到了挑战问题。作者似乎不愿意提出任何建议,所以我在这里问。

挑战在于使用for循环创建代码,该代码将计算任何给定范围内的奇数之和(范围由' start'和' end'参数定义)。第一种方法(isOdd)检查数字是否为奇数,第二种方法计算总和。

InteliJ现在给我警告或错误,但在测试时,代码没有显示正确的结果。我不知道bug在哪里。有人可以帮忙吗?

public class SumOddRange {
  public static boolean isOdd(int number) {
        if (number < 0) {
            return false;
        } else if (number % 2 > 0) {
            return true;
        } else {
            return false;
        }

    }

   public static int sumOdd (int start, int end) {
        int sum = 0;
        for (int i = start; i <= end; i++) {

            if (isOdd(i) && end >= start && start > 0) {
                sum += i;
                return sum;
            }
        }
        return -1;
   }
}

7 个答案:

答案 0 :(得分:2)

问题在于您返回您遇到的第一个奇数的总和。像这样修改它,只在最后返回总和来考虑整个范围:

min(event_id)

答案 1 :(得分:2)

这是我的正确解决方案。

public class SumOddRange {

    public static boolean isOdd(int number) {

        if (number <= 0) {
            return false;
        } else if (number % 2 > 0) {
            return true;
        } else {
            return false;
        }
    }

    public static int sumOdd (int start, int end) {

        int sum = 0;

        if ((start < 0 || end < 0) || end < start) {
            return -1;
        } else if ((end >= start) && (start > 0 && end > 0)) {

            for (int i = start; i <= end; i++) {
                if (isOdd(i) ) {

                    sum += i;

                }
            }
        }
        return sum;
    }
}

答案 2 :(得分:1)

您可以看到我的解决方案。它可以在Udemy平台上运行

public class SumOddRange {
public static boolean isOdd(int number) {
    if (number < 0) {
        return false;
    } else if (number % 2 > 0) {
        return true;
    } else {
        return false;
    }

}

public static int sumOdd(int start, int end) {

    int sum = 0;
    if ((start > end) || (start < 0)) {
        return -1;
    }
    for (int i = start; i <= end; i++) {

        if (isOdd(i)) {
            sum += i;
        }
    }
    return sum;
}

}

答案 3 :(得分:0)

您在找到第一个奇数后返回总和,从而计算错误。

答案 4 :(得分:0)

您不需要return中的if-statementreturn存在函数,因此总是返回第一个奇数。

其次,您只需要检查isOdd,因为这已经检查了数字是否大于零。 for循环确保start < end

这应该可以解决问题:

public class SumOddRange {
  public static boolean isOdd(int number) {
        if (number < 0) {
            return false;
        } else if (number % 2 > 0) {
            return true;
        } else {
            return false;
        }

    }

   public static int sumOdd (int start, int end) {
        int sum = 0;
        for (int i = start; i <= end; i++) {

            if (isOdd(i)) {
                sum += i;
            }
        }
        return sum;
   }
}

答案 5 :(得分:0)

@NiVeR已经提供了可行的解决方案。但是,为了包括问题和其他答案的评论,这里是改进的片段:

public class SumOddRange {    
   public static int sumOdd (int start, int end) {
        // validation
        if(start > end){
             throw new IllegalArgumentException(start + " > " + end);
        }

        // empty sum is always 0
        int sum = 0;

        // if start is even, just increase by 1 to make it odd
        if(start % 2 == 0){
             start++;
        }

        for (int i = start; i <= end; i+=2) {
            // i will always be odd
            sum+=i;
        }

        return sum;
   }
}

您可以看到,您并不总是需要检查数字是否为奇数。只需在开始时执行一次,然后按2递增。

答案 6 :(得分:0)

您也可以在下面查看我的解决方案。我正严格按照要求去做。这是一个问题:Udemy Coding Exercise

public class SumOddRange {

public static boolean isOdd(int number){
    if((number > 0) && (number % 2 != 0)){
        return true;
    }else {
        return false;
    }
}

public static int sumOdd(int start, int end){
    int sum = 0;
    if(end >= start){
        if((start > 0) && (end > 0)){
            for (int i = start; i <= end; i++) {
                if (isOdd(i)) {
                    sum = sum + i;
                }
            }
            //need to return sum after all odd numbers are found within range
            return sum;
        }
    }

    return -1;
}

}