1

本「Java のデータ構造とアルゴリズム」では、次の配列検索メソッド コードが提供されています。

{
    int j;
    for(j=0; j< nElems; j++)            // for each element,
        if( a[j].getLast().equals(searchName))  // found item?
             break;                       // exit loop before end
    if(j == nElems)                    // gone to end?
      return null;                    // yes, can't find it
    else
      return a[j];                    // no, found it
} 

if(j == nElems) チェックが必要な理由を理解しようとしていますか? 次のように記述されている場合、メソッドは同じように機能しませんか?

{           
    int j;
    for(j=0; j <nElems; j++)               
      if( a[j].getLast().equals(searchName))      
         return a[j];              
    return null;
}
4

3 に答える 3

1

はい、これらの方法はどちらも同じ結果になります。

于 2013-02-19T11:59:58.790 に答える
1

j:P forの内部を宣言して、そのスコープを制限することもできます。

最初の実装では、すべての要素を繰り返し処理しても何も見つからなかったかどうかを確認します。jこれは、の停止条件と等しくなるまでインクリメントされたためfor-loopです。つまり、が原因で停止しなかったことはbreak、要素が見つかったことを示しています。

読みやすいので、私はあなたの解決策を好みます:)

于 2013-02-19T12:00:37.270 に答える
0

まあ、 jは nElems と決して等しくないので、この条件(j==nElems)は間違っていませんが、動作していません。あなたはこのようにすることができますが、それ (j==nElems-1) はコードの無駄を盗むので、あなたのアルゴリズムは最初のものよりも優れています.

于 2013-02-19T12:29:34.027 に答える