2013-07-12 44 views
0

我寫了這個小程序作爲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)之前它沒有工作,但現在它是。

+1

對於'AND','返回A && B',對於'OR','return A || B'等,或者完全省略這些功能? – Dukeling

+2

'A == true'是多餘的,可以簡化爲'A'。 – Dukeling

+1

@Dukeling這是一個味道的問題,然而 –

回答

0

缺少返回語句錯誤意味着函數聲明說它返回一些東西,但是至少有一個流不返回任何東西。例如。在代碼中 - 如果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; 
} 

}

1

某些方法的路徑導致沒有返回值。

例如:

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

如果A ==虛假和B ==真,沒有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 
     } 
+0

你的第二個「這裏沒有回報」是錯誤的。沒有回報是好的,因爲沒有分支可以到達那裏。 – Dukeling

+0

@Dukeling你是什麼意思?那裏沒有返回語句,所以有分支沒有返回語句。如果A == false,並且B == true,它將會到達那裏。 – thatidiotguy

+0

@thatidiotguy這裏有一個隱含的空白,如果內部if語句是假的,它將不返回任何內容 –

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; 
    } 
} 
+3

+1對於該建議,它可以節省程序員的生命! – NINCOMPOOP

+0

@TheNewIdiot是的,這在執行Java編程時被強烈推薦。 –

+0

@downvoter照顧至少解釋你的downvote? –

1

你缺少某些代碼路徑的返回語句。

OR,如果A爲真且B爲假會發生什麼?

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; 
    } 
} 

因此,如果是真的,但B是虛假的沒有任何將被返回,編譯器不能允許這個

它也是不明智的使用多線 - 無支撐 - 如果因爲它使它更容易做出這些類型的錯誤。請參閱http://cafe.elharo.com/blogroll/braceless-if-considered-harmful/

0

您必須對所有可能的「路徑」具有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; 
    } 

你也可以有一個返回NULL;在每個方法結束時聲明以避免此錯誤。

+0

它值得補充的是,使用多線 - 無槓桿 - 如果被認爲是不好的做法 –

1

除了返回語句錯誤之外,您正在使代碼過於複雜。 Java已經具有複合邏輯運算符,可以極大地簡化對程序的推理。對於OR

// 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; 
} 

您也可以建立其他的邏輯門邏輯門,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)); 
} 

使用此功能,看看你是否可以自己組成休息。

+0

不再需要功能了... – arshajii

+0

@arshajii首先不需要函數,但* *因爲它們正在使用這很簡單。 –

+0

酷!首先,我對邏輯門不太瞭解:P。 「A ||」究竟是什麼? B'呢? –

2

正如其他人所指出的那樣,你真的錯過了一些return語句。這裏是你正在尋找的短版本:

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中的類名應該以大寫字母開頭。

+0

爲什麼不編寫這些?你已經寫了NOT,OR,XOR和AND。你可以從那裏構建XNOR,NOR和NAND。從技術上講,你可以從NAND門建立一切。 –

+0

當然,你也可以將XOR組合爲OR(AND(A,NOT(B))和AND(B,NOT(A)))。我想我出於效率原因選擇這個答案(儘量減少昂貴的函數調用)。 – winne2