Java函数未返回期望值

时间:2020-09-10 10:20:47

标签: java function for-loop return

我正在编写的程序中的一个错误,该错误是我对Java的分配。 目标:程序应采用两个参数,并找出这些参数之间的所有奇数。然后它应该返回所有这些数字的总和。

错误::如果参数为负或起始编号大于终止编号,则应返回-1。但是我的程序返回0。

也许我的程序没有在循环内更新求和值。但是即使如此,根据返回条件,我的函数应返回-1,而不是总和。

public class SumOddRange{
    public static void main(String[] args){
        System.out.println(sumOdd(10,5));
    }
    
    public static boolean isOdd(int number){
        return (number<0)||(number%2==0)?false:true;
    }
    
    public static int sumOdd(int start, int end){

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

2 个答案:

答案 0 :(得分:3)

将输入检查作为方法中的第一件事,并将&&更改为||,因为如果第一项检查失败第二项检查要返回,则想将其返回失败,不仅当失败时。 isOdd可以内联:

public static int sumOdd(int start, int end){
    if (start <= 0 || start > end)
        return -1;

    int sum = 0;
    for (int i = start; i <= end; i++) {
        if (i % 2 != 0) { // or if (i % 2 == 1) {
            sum += i;
        }
    }
    return sum;
}

答案 1 :(得分:1)

您的return (start<=0)&&(start>end)? -1: sum;行中有逻辑错误

如果开始为<0或开始>结束,则必须返回-1,因此请使用“ ||” (逻辑或)而不是“ &&”(逻辑和):

return (start<=0)||(start>end)? -1: sum;

请仔细阅读@ luk2302的答案,以获得更好的解决方案。