2017-04-27 19 views
0

我正在使用計數器的while循環來查找數組上的元素。我將檢查如果返回的元素等於數組的長度,則找不到該元素。循環是這樣的。查找數組上的元素時,我應該做一個別的?

int i = 0; 
    int returned; 
    boolean found = false; 
    while(i < words.length && !found){ 
     WordInText check = new WordInText(w); 
     if(check.equals(words[i])){ 
      found = true; 
     } 
     else{ 
      i++; 
     } 
    return i 

什麼我不知道它是否會更好,而不是做一個對其他任何條件下做到以下幾點

int i = 0; 
    int returned; 
    boolean found = false; 
    while(i < words.length && !found){ 
     WordInText check = new WordInText(w); 
     if(check.equals(words[i])){ 
      found = true; 
     } 
     i++; 
    } 
    if(!found) 
     i++; 
    return i-1 

我覺得,因爲它沒有第二個是更有效檢查每個循環的條件,如果數組非常長,則必須進行很多操作。但我不確定什麼時候決定每一個,因爲第二個看起來真是醜陋而不直觀。

+0

更好的方法是使用'HashSet '。 –

+0

什麼是'w ','WordInText'? – user1803551

+0

我問他們是什麼,你說「是」... – user1803551

回答

0

有多種可能的重構是迴避的問題,但我會努力回答你的問題的是:

  • else花費什麼:它只是將要執行的塊,當且僅當if的條件評估爲false
  • 它很容易被人

明白即使它看起來不漂亮,我看不出有任何理由,以避免它。在你的第二個代碼中,不僅會引入額外的指令,而且也很難理解,因爲你必須弄清楚爲什麼當元素沒有找到時需要增加索引。

0

提取代碼的方法,這樣

public int contains(....) { 
    int i = -1; 
    while(i < words.length){ 
    WordInText check = new WordInText(w); 
    if(check.equals(words[i])){ 
     return i; 
    } 
    i++; 
    } 
return i; 
} 

不需要額外的變量和代碼的結構更加清晰

0

我不認爲你需要使用一個或另一個部分如果條件來檢查它是否發現導致你已經檢查while循環中的條件。

int i = 0; 
int returned; 
boolean found = false; 
while(i < words.length && !found){ 
    WordInText check = new WordInText(w); 
    if(check.equals(words[i])){ 
     found = true; 
    } 
    i++; 
} 
return i; 

所以這裏的循環將繼續下去,直到發現爲真值(意味着直到所需的元素被發現。於是,在下一次迭代將檢查發現的值是否是假的。因爲它不是假的了這個循環將不會被執行並且我將被返回 在那裏你可以檢查i的值並決定是否找到元素