2012-01-13 98 views
-2

我得到的代碼中的錯誤從我這部分代碼:在Java中返回錯誤?

public boolean findCustomer(String inPersonalNumber){ 

    // check if personal number already exist 
    for (int i=0; i<customerList.size();i++) { 
     if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
      return true; 
     } 
    } 
    return true;  
} 

當我刪除了第一個真正的回報,而是到最後返回true,它沒有得到錯誤在我的Eclipse代碼,但爲什麼我不能擁有第一名,這是否會一樣?謝謝!

編輯:來自eclipse的錯誤消息說:此方法必須返回布爾類型的結果。我很困惑,因爲那不是我所做的?!

是的,休息必須在代碼

我可以寫一些其他的方式方法?

編輯編號2
爲什麼不能使用此代碼?

public boolean findCustomer(String inPersonalNumber){ 

// check if personal number already exist 
for (int i=0; i<customerList.size();i++) { 
    if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

此方法返回一個布爾值,所以我不明白爲什麼我得到一個錯誤!?代碼看起來適合我嗎?

+7

如果你提到_what_錯誤你可能會有所幫助......順便說一句:無論如何,你的函數將會_always_返回「true」,所以你的邏輯可能有錯誤! – Nailuj 2012-01-13 12:28:37

+0

你的方法編譯得很好,所以你看到了什麼錯誤? – adarshr 2012-01-13 12:29:07

+1

最後的回報應該是「返回false」;因爲你沒有找到客戶。鑑於上面的評論,Eclipse有可能抱怨說你的代碼總是返回true嗎? – 2012-01-13 12:32:35

回答

3

您的編輯#2無法編譯,因爲您的代碼有可能不會進入for-loop。這將是情況下,如果customerList.size()爲0。要解決這個問題,你只需要後添加return語句for循環,以及:

// check if personal number already exist 
for (int i=0; i<customerList.size();i++) { 
    if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
     return true; 
    } 
    else { 
     return false; 
    } 
} 
return false; 

這裏還有一點是,這個代碼沒有按」 t 邏輯上有很大意義:它只會只有根據您的列表中的第一個項返回true或false。這可能是而不是你想要什麼。所以仔細看看其他幾個答案,其中很多答案都是你如何做到這一點的好例子。

0

看起來像你已經關閉了自動構建 eclipse的功能。它可能會抱怨當你還沒有完全輸入代碼時曾經存在的錯誤!如果您出於某種原因退訂了系統,也會發生這種情況。

另外,如果條件不滿足,你不應該返回false嗎?

public boolean findCustomer(String inPersonalNumber) { 

    // check if personal number already exist 
    for (int i = 0; i < customerList.size(); i++) { 
     if (customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)) { 
      return true; 
     } 
    } 

    return false; 
} 
+0

@downvoter - 謹慎解釋? – adarshr 2012-01-13 12:35:44

+2

你怎麼知道他想要什麼?他只是問他爲什麼會出錯。也許他只是想知道日食是如何工作的。 – shift66 2012-01-13 12:37:53

+1

我沒有downvote,但它沒有解決這個問題,只是指出了一個潛在的業務邏輯問題。看起來你是一個用「休息」(不管你是否做到了)來降低答案的人,如果這個「休息」是原因,那麼這些低估是不合適的。 – 2012-01-13 12:39:43

-1

因爲無論如何你的for循環都會失去意義。
如果您想停止循環使用break;而不是第一次返回。

+0

不需要休息。看到我的答案。 – adarshr 2012-01-13 12:31:14

+0

Kunem aveli vat @:D – 2012-01-13 12:40:53

+0

Gago:Oks。 mianshanak! – shift66 2012-01-13 12:43:11

0
public boolean findCustomer(String inPersonalNumber){ 
    boolean result = false; 
    // check if personal number already exist 
    for (int i=0; i<customerList.size();i++) { 
     if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
      result = true; 
      break; 
     } 
    } 
    return result ;  
} 
+0

可以在沒有「休息」的情況下完成 – adarshr 2012-01-13 12:31:47

+2

我覺得這不僅僅是返回的改進。 – 2012-01-13 12:31:55

+0

此外,這是一種糟糕的編碼風格。回報更加明確。 – yatskevich 2012-01-13 12:35:43

0

首先回歸將返回只有在滿足了所有條件的情況下,但這種方法應該返回boolean按代碼。它也希望在失敗的情況下回歸。

刪除第一個返回不會影響編譯,因爲它有第二個返回,它將在沒有任何條件的情況下工作。

編輯:回答你的第二個問題

此代碼有兩個返回的,但如果你的customerList是什麼大小爲0,在這種情況下也,方法必須返回boolean值。對?爲此,編譯器問。

順便說一句,代碼沒有空檢查。

您的最終代碼可能是這樣的。在代碼中保留多個返回語句並不是一個好習慣。

public boolean findCustomer(String inPersonalNumber) { 
    boolean retVal = false; 
    if (!(inPersonalNumber == null || inPersonalNumber.trim().equals("") 
     || customerList == null || customerList.size() == 0)) { // inputs are valid to run this check 
     // check if personal number already exist 
     for (int i = 0; i < customerList.size(); i++) { 
      if (inPersonalNumber.equals(customerList.get(i).getCustomerPersonalNumber()) { // to avoid NPE, kept inPersonalNumber in check 
       retVal = true; 
       break; 
      } 
     } 
    } 
    return retVal;  
} 
+0

@downvoter - 謹慎解釋? – Vaandu 2012-01-13 13:03:27

0

When I remove the first return true and instead to the last return true, it don't get the error in my eclipse code, but why can't I have the first place and would this be the same?

如果您刪除第二個return語句代碼將能夠運行,並沒有返回值 - 這是不可能的,因爲你定義爲具有布爾返回類型的方法。所以它無論如何都必須始終返回一個值。

只要將第二個return語句更改爲false,應該做你想做的事。

+0

什麼路徑不會返回值? – 2012-01-13 12:35:33

+0

@DaveNewton如果他刪除了第二個return語句,那是我認爲這個問題試圖問 – NimChimpsky 2012-01-13 12:37:00

+0

我以爲他說錯誤發生在顯示的代碼中,這就是第一句話所說的。 – 2012-01-13 12:41:40