Java 缺少返回站
我用Java编写了这个小程序作为练习,它模拟了7个电气逻辑门,我目前正在学习它。但当我试图编译它时,它会给我几个错误,指出缺少RETURN语句,但只适用于包含2个if语句和、OR、NAND和NOR的子例程。我想知道Java if语句是否有我不知道的地方。我还想知道在Java中是否有一种方法可以像在C中那样执行ifX&&Y。总之,下面是代码:Java 缺少返回站,java,if-statement,return,Java,If Statement,Return,我用Java编写了这个小程序作为练习,它模拟了7个电气逻辑门,我目前正在学习它。但当我试图编译它时,它会给我几个错误,指出缺少RETURN语句,但只适用于包含2个if语句和、OR、NAND和NOR的子例程。我想知道Java if语句是否有我不知道的地方。我还想知道在Java中是否有一种方法可以像在C中那样执行ifX&&Y。总之,下面是代码: package logic; public class logic { boolean AND(boolean A, boolean B) {
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
所有的帮助或建议都被接受
由于某种原因,在我尝试使用ifA==true&&B==true之前,它不起作用,但现在它起作用了。您的一些方法的路径没有返回值 例如:
boolean NOR(boolean A, boolean B) {
if(A==false) {
if(B==false)
return true;
}
else
return false;
}
如果A==false和B==true,则没有要运行的返回语句。这就是为什么会出现编译器错误
如果在所有if语句周围加上括号,这一点可能会更加明显:
boolean NOR(boolean A, boolean B) {
if(A==false)
{
if(B==false)
{
return true;
}
//No return here
}
else
{
return false;
}
//No return here
}
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;
}
}
某些代码路径缺少返回语句
在OR中,如果A为true,B为false会发生什么情况?存在可能导致不返回任何值的值,请记住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为true,而B为false,则不会返回任何内容,编译器将不允许这样做
使用多行无括号if也是不明智的,因为它更容易产生此类错误。请参见对于所有可能的路径,必须有一个return语句。比如说
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;
}
您还可以返回空值;在每个方法的末尾添加语句以避免此错误。除了返回语句错误之外,您的代码太复杂了。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;
}
类似地用于或:
boolean OR(boolean A, boolean B) {
return A || B;
}
您还可以从其他逻辑门构建逻辑门,例如NOT+或==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) );
}
用这个,看看你是否能自己创作剩下的 Missing 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;
}
}正如其他人所指出的,您确实遗漏了一些返回语句。以下是您正在寻找的简短版本:
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中的类名应该以大写字母开头。对于AND,返回a&&B,对于OR,返回a | | B等,或者完全忽略函数?a==true是多余的,可以简化为a。@Dukeling这是一个有趣的问题however@RichardTingle请不。我会强迫性地删除==true或==false,显然会替换为!。。。无论我在任何代码中看到它在哪里。@RichardTingle if John.isHuman==true在words中-if John is human是true。我不知道你的情况,但那不是我说话的方式,因此也不是我编码的方式。尽管你有一个观点!有些东西,虽然它只适用于不熟悉这种语法的程序员,但您已经习惯了阅读!够快了,你的第二次不归路是错误的。“没有回报是好的,因为没有分支机构可以到达那里。@Dukeling,你是什么意思?”?那里没有return语句,因此有些分支没有return语句。如果A==false,B==true,它将到达那里。@thattidotguy这里有一个隐式的空else,如果内部If语句为false@LuiggiMendoza什么?else与第一个if匹配!我疯了吗???他的内部if用括号括起来。我想从技术上讲,你要么需要第一个//此处不返回,要么需要第二个//此处不返回,但不能同时使用+1。对于这个建议,它可以挽救程序员的生命@是的,这是在进行Java编程时强烈建议的。-1因为您编写的所有内容都与编码风格有关,这是个人偏好,实际上与错误无关,尽管您在代码中对错误有注释。如果你把它做成脚注,那就好了。@Dukeling事实上,这里的问题是编码风格。否则,就不会有任何错误。通过阅读代码,您可以看到这是一个if-else练习,旨在迷惑学生并教他们使用大括号的重要性。对于这个特定的例子,编码风格很重要。我发现你最后的评论很难接受,因为上面的A==true和B==true语句。即使这是他们的原始代码。@arshajii一开始就不需要函数,但由于使用了它们,这就简单多了。酷!我不知道
首先,关于逻辑门的内容就这么多了:P.A | | B到底做什么?@user2576988这是你试图编写的或门,纯的和纯的simple@user2576988| |在Java和许多其他语言中,是计算逻辑OR的运算符,这正是您试图建模的门。看看Java操作符列表:值得一提的是,如果认为使用多行无括号是不好的做法,那么为什么不编写这些呢?您已经编写了NOT、OR、XOR和and。您可以从中构建XNOR、NOR和NAND。从技术上讲,你可以从一个与非门构建任何东西。当然,你也可以把XOR写成ORANDA,NOTB,ANDB,NOTA。我想我之所以选择这个答案,是因为效率的原因,可以最大限度地减少昂贵的函数调用。