2015-10-20 104 views
1

我正在創建一個返回變量elt的方法,如果它存在於一個數組中。如果它不存在於一個數組中,我需要返回null。如何在Java中使用for循環時實現return語句?

問題是,我正在使用if語句在for循環中檢查數組中每個項目中的變量elt。我不認爲我可以在for循環中的if語句結尾處放置返回語句,因爲每次執行if語句時,潛在的返回值都會不同。我認爲這會在每次for循環循環時產生一個新的返回值。爲了解決這個問題,我創建了一個名爲exists的布爾型臨時變量。如果爲true,該方法將返回變量elt。如果爲false,它將返回null。我正在使用的代碼如下。

public T remove(T elt) { 
     boolean exist; 

     for (int i=0; i<data.length; i++) { 
      if (data[i] == elt) { 
       data[i] = null; 
       size--; 
       exist = true; 
       System.out.println(exist); 

       for (++i; i < data.length; i++) { 
        data[i-1] = data[i]; 
       } 
      } 
     } 
     if (exist = true) 
      return elt; 
     else 
      return null; 
    } 

我的問題是,有沒有辦法在返回語句的方法中不使用臨時變量?

+2

這是完全正常的把一個'return'在'for'循環。該方法將盡快完成並退出。 –

+0

請注意,您發佈的解決方案和可接受的解決方案的不同之處在於,您的數據刪除了'data'中的所有'elt',而接受的解決方案僅刪除了第一個遇到的事件(並立即退出)。這可能是好的或壞的取決於你的方法的合同。 –

+0

@JiriTousek,謝謝你指出這一點,你是絕對正確的!儘管如此,即使我發佈的解決方案也只是消除了第一次遇到的情況。你能給我一個關於如何去除所有事件的提示嗎?我無法弄清楚。 –

回答

2

您幾乎可以在任何地方放置返回語句。

要回答你的問題,你可以把一回後,你內心的for循環像如下:

public T remove(T elt) { 

    for (int i=0; i<data.length; i++) { 
     if (data[i] == elt) { 
      data[i] = null; 
      size--; 
      System.out.println(exist); 

      for (++i; i < data.length; i++) { 
       data[i-1] = data[i]; 
      } 

      return elt; 
     } 
    } 

    return null; 
} 
+0

謝謝你的幫助!對我來說,這看起來好像會在for循環中返回兩個elt,並且一旦它存在for循環就返回null。這不是它會如何工作?在這種情況下,我不明白它如何返回兩件事情。 –

+0

它無法達到兩個返回語句。一旦你到達一個return語句,代碼將離開該方法並「返回」到調用它的代碼(又名:返回堆棧)。你只能有1個返回值。返回後的任何代碼都不會被執行。 –

+0

明白了,謝謝! –

3

沒有必要使用一個額外的變量。你可以直接從for循環返回。而不是寫exist = truereturn elt,並在年底 而不是

if (exist = true) 
      return elt; 
     else 
      return null; 

的只寫return null,這樣,如果elt犯規存在,它將返回null。

+0

如果elt不存在,那麼返回null怎麼樣?如果elt不存在,編寫'return elt'會自動返回null嗎? –

+0

感謝@Omar指出。編輯我的回答 – Rehman

+0

@Rehman你可能會想'=='而不是'='... –