Java函数未返回预期值

Java函数未返回预期值,java,function,for-loop,return,Java,Function,For Loop,Return,我正在编写的程序中的一个bug,作为java的一个任务。 目标:程序应采用两个参数,并找出这些参数之间的所有奇数。然后它应该返回所有这些数字的总和 错误:当参数为负数或开始数大于结束数时,应返回-1。但是我的程序返回0 也许我的程序没有更新循环中的和值。但即使如此,根据返回条件,我的函数应该返回-1,而不是总和 public class SumOddRange{ public static void main(String[] args){ System.out.prin

我正在编写的程序中的一个bug,作为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;
    }
}
公共类范围{
公共静态void main(字符串[]args){
系统输出println(sumOdd(10,5));
}
公共静态布尔isOdd(整数){

return(number将输入检查作为方法中的第一件事,并将
&
更改为
|
,因为您希望在第一次检查失败或第二次检查失败时返回,而不仅仅是在两次检查都失败时返回。并且
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;
}
公共静态int-sumOdd(int-start,int-end){
如果(开始-结束)
返回-1;
整数和=0;

对于(int i=start;i将输入检查作为方法中的第一件事,并将
&&
更改为
|
,因为您希望在第一次检查失败或第二次检查失败时返回,而不仅仅是在两次检查都失败时返回。
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;
}
公共静态int-sumOdd(int-start,int-end){
如果(开始-结束)
返回-1;
整数和=0;

对于(int i=start;i您的行
return(startend)?-1:sum;

如果start是end,则必须返回-1,因此使用“||”(逻辑Or)而不是“&&”(逻辑and):

return(startend)?-1:总和;

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

您的行
返回(startend)?-1:sum;

如果start是end,则必须返回-1,因此使用“||”(逻辑Or)而不是“&&”(逻辑and):

return(startend)?-1:总和;


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

将你的&&to | |->更改为逻辑或非逻辑,并且,你可能需要在开始循环之前进行输入检查,返回
-1
甚至在进入循环
之前,如果(开始<0 | |结束<0 |开始>结束)返回-1;
并且诚实地说:你接受了“错误”的答案。这个答案给了你一句你需要“修正”的话"你的问题。而另一个告诉了你更多…天哪。我只是觉得他没有luk2302那么有经验。所以接受他的话会让我得到一些赞赏。我知道我需要在技能上多下功夫,但我对编程和学习还不熟悉。这不就是学习的全部吗?非常感谢你给我推荐调试器谷歌搜索了它们是什么。将你的&&to | |->更改为逻辑的,或者代替逻辑的,这样,你可能需要在开始循环之前进行输入检查,在进入循环之前返回
-1
,如果(开始<0 | |结束<0 | |开始>结束)返回-1;
,老实说:你接受了“错误”回答。这个回答给了你一句你需要“修正”的话你的问题。而另一个告诉了你更多…天哪。我只是觉得他没有luk2302那么有经验。所以接受他的话会让我得到一些赞赏。我知道我需要在技能上多下功夫,但我对编程和学习还不熟悉。这不就是学习的全部吗?非常感谢你给我推荐调试器谷歌搜索了它们是什么。提示:这些检查是为了防止在无效数字上循环。在循环之后检查有什么帮助?!@GhostCat,是的,我同意,理想情况下他应该先检查无效输入并返回-1,如果有的话。虽然在这种情况下,它给出了正确的结果,但效率不高。老实说,OP接受了wrong回答。你只是解决了他的一个问题,另一个答案的作用远不止于此。但似乎OP主要担心的是解决问题,而不是学习一些东西……嘿,你如何感谢他的帮助。而不是有毒。提示:这些检查是为了防止循环无效数字。之后检查有什么帮助循环?!@GhostCat,是的,我同意,理想情况下他应该先检查无效输入并返回-1,如果有的话。虽然在这种情况下,它给出了正确的结果,但它不是有效的。老实说,OP接受了错误的答案。你只要解决他的一个问题,另一个答案就可以做得更多。但OP似乎主要担心的是f吃东西,不学东西…嘿,你感谢他的帮助,而不是有毒的。