2017-04-27 4 views
0

私はカウンタでwhileループを使用して、配列上の要素を探しています。返された要素が配列の長さと等しい場合、要素が見つからないことを確認します。ループはこのようなものです。アレイ上の要素を見つけながら、いつelseを作るべきですか?

私はそれが持っていないため、2番目の1がより効率的であると感じ、より良いの代わりに、以下の

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 

を行うには、すべての条件に他をしていることになる場合、私は疑問に思って何

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 

すべてのループの状態をチェックし、アレイが本当に長かった場合には、多くの作業を行う必要があります。しかし、私はそれぞれの決定時期が分からないのは、第2のものが本当に醜く、直観的ではないように見えるからです。

+0

「HashSet 」を使用する方が良いでしょう。 –

+0

'w '、' WordInText'? – user1803551

+0

私は彼らが何であるかを尋ね、あなたは「はい」と答えました... – user1803551

答えて

0

は質問を避ける複数の可能なリファクタリングがありますが、私はみますであるとして、あなたの質問に答えるために:

  • elseは何も費用はかかりません:それが実行されますちょうどブロックの場合にのみif年代であれば条件はfalseと評価されます。
  • 簡単にそれがきれいに見えない場合でも、私はそれを避けるために理由を見ていない、誰

によって理解されています。 2番目のコードでは、余分な命令を紹介するだけでなく、要素が見つからない場合にインデックスを増やす必要があるため、理解することも難しくなります。

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ループで条件をチェックしているかどうかを調べるために、else部分またはelse if条件を使用する必要はないと思います。 FOUNDの値がtrueになるまで

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; 

だからここにループが(上に行く必要とされる要素が発見されるまでのことを意味している。そして、次の反復でそれが見つかりました。値がfalseであるかどうかをチェックします。それはもう偽ではないとしてループが実行されず、返されます。 ここで、iの値を調べて、要素が見つかったかどうかを判断することができます。

関連する問題