缺少退货声明

时间:2013-07-12 16:05:28

标签: java if-statement return

我在Java中编写了这个小程序(它模拟了7个电逻辑门),正如我目前所学习的那样。但是当我尝试编译它时,它给出了几个错误,说明"MISSING RETURN STATEMENT",但仅针对具有2个if语句(AND,OR,NAND和NOR)的子例程。我想知道是否有一些我不知道Java if语句的东西。我也想知道在Java中是否有办法if(X && Y),就像在C中一样。无论如何,这里是代码:

package logic;
public class logic {
    boolean AND(boolean A, boolean B) {
        if(A==true) {
            if(B==true)
                return true;
        }
        else
            return false;
    }
    boolean OR(boolean A, boolean B) {
        if(A==false) {
            if(B==false)
                return false;
        }
        else
            return true;
    }
    boolean NOT(boolean A) {
        if(A==true)
            return false;
        else
            return true;
    }
    boolean NAND(boolean A, boolean B) {
        if(A==true) {
            if(B==true)
                return false;
        }
        else
            return true;
    }
    boolean NOR(boolean A, boolean B) {
        if(A==false) {
            if(B==false)
                return true;
        }
        else
            return false;
    }
    boolean XOR(boolean A, boolean B) {
        if(A==B)
            return false;
        else
            return true;
    }
    boolean XNOR(boolean A, boolean B) {
        if(A==B)
            return true;
        else
            return false;
    } 
}

和错误消息:

logic/logic.java:10: error: missing return statement
    }
    ^
logic/logic.java:18: error: missing return statement
    }
    ^
logic/logic.java:32: error: missing return statement
    }
    ^
logic/logic.java:40: error: missing return statement
    }
    ^
4 errors  

接受所有帮助或建议。

出于某些原因,当我尝试使用if(A==true && B==true)之前它不起作用,但现在却是。

8 个答案:

答案 0 :(得分:3)

Java与Python不同,编译器理解代码块是通过简单的缩进来表示的。我建议始终使用大括号{ }打开关闭新代码块,即使是一行。只是改写你的一个门:

boolean AND(boolean A, boolean B) {
    if(A==true) {
        if(B==true) {
            return true;
        }
        //missing return here!
        //fix it by adding a return
        return false;
    } else {
        return false;
    }
}

答案 1 :(得分:2)

正如其他人所指出的,你真的错过了一些回复陈述。这是您正在寻找的简短版本:

public class Logic {
    boolean AND(boolean A, boolean B) {
        return A && B;
    }
    boolean OR(boolean A, boolean B) {
        return A || B;
    }
    boolean NOT(boolean A) {
        return !A;
    }
    boolean NAND(boolean A, boolean B) {
        return !(A && B);
    }
    boolean NOR(boolean A, boolean B) {
        return !(A || B);
    }
    boolean XOR(boolean A, boolean B) {
        return A ^ B;
    }
    boolean XNOR(boolean A, boolean B) {
        return !(A ^ B);
    } 
}

请注意,Java中的类名应按惯例以大写字母开头。

答案 2 :(得分:1)

您的某些方法的路径不会产生返回值。

例如:

boolean NOR(boolean A, boolean B) {
            if(A==false) {
                if(B==false)
                    return true;
            }
            else
                return false;
        }

如果A == false且B == true,则没有要运行的return语句。这就是你得到编译器错误的原因。

通过在所有if语句周围加上括号,可能会更加明显:

boolean NOR(boolean A, boolean B) {
            if(A==false) 
            {
                if(B==false)
                {
                    return true;
                }
                //No return here
            }
            else
            {
                return false;
            }

            //No return here
        }

答案 3 :(得分:1)

您缺少某些代码路径的return语句。

OR中,如果A为真且B为假,会发生什么?

答案 4 :(得分:1)

除了return语句错误之外,您的代码方式太复杂了。 Java已经具有复合逻辑运算符,可以大大简化您对程序进行推理的方式。

// no need for A == true, A is either already true or false
// just combine them using the && operator
boolean AND(boolean A, boolean B) {
   return A && B;
}

同样适用于OR:

boolean OR(boolean A, boolean B) {
   return A || B;
}

您还可以从其他逻辑门构建逻辑门,EX NOT + OR == NOR

boolean NOT(boolean A) {
   return !A;
}

boolean OR(boolean A, boolean B) {
   return A || B;
}

将两者结合起来创建NOR:

boolean NOR(boolean A, boolean B) {
   return NOT( OR(A, B) );
}

使用此功能,看看你是否可以自己组成其余部分。

答案 5 :(得分:0)

有可能的值可能导致没有返回任何值,请记住if有一个空的else{}是否给它一个,所以让我们看看你的一个函数

boolean AND(boolean A, boolean B) {
    if(A==true) {
        if(B==true)
            return true;
        }else{
              //else made explicit by me
              //NO RETURN
        }
    }
    else{
        return false;
    }
}

因此,如果A为真但B为假将不返回任何,则编译器不能允许此

使用multiline-braceless-if也是不明智的,因为它可以更容易地产生这些错误。见http://cafe.elharo.com/blogroll/braceless-if-considered-harmful/

答案 6 :(得分:0)

您必须拥有所有可能"路径"的退货声明。例如

boolean AND(boolean A, boolean B) {
        if(A==true) {
            if(B==true)
                return true;
        }
        else
            return false;
    }

相当于

boolean AND(boolean A, boolean B) {
        if(A==true) {
            if(B==true)
                return true;
            else
                //something must be returned here
        }
        else
            return false;
    }

您还可以返回null;每个方法结束时的语句,以避免此错误。

答案 7 :(得分:0)

缺少return语句错误意味着函数声明表明它返回了一些内容,但是存在至少一个不返回任何内容的流。例如。在And的代码中 - 如果A为真且B为假。修改了代码:

package logic;
public class Logic {
boolean AND(boolean A, boolean B) {
    if (A == true && B == true) {
        return true;
    }
    return false;
}

boolean OR(boolean A, boolean B) {
    if (A == false && B == false) {
        return false;
    }
    return true;
}

boolean NOT(boolean A) {
    if (A == true) {
        return false;
    }
    return true;
}

boolean NAND(boolean A, boolean B) {
    if (A == true && B == true) {
        return false;
    }
    return true;
}

boolean NOR(boolean A, boolean B) {
    if (A == false && B == false) {
        return true;
    }
    return false;
}

boolean XOR(boolean A, boolean B) {
    if (A == B) {
        return false;
    }
    return true;
}

boolean XNOR(boolean A, boolean B) {
    if (A == B) {
        return true;
    }
    return false;
}

}