我在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)
之前它不起作用,但现在却是。
答案 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;
}
}