4

私は同僚の 1 人と議論をしています (議論を読んでください!)。私はこのコードが非常に間違っていると主張していますが、彼は何も問題はないと考えています。

for (Iterator<String> iter = collectionOfStrings.iterator(); iter.hasNext();) {
   String item = iter.next();
   ...
}

ループの重複があるため、このコードは間違っていると私は主張します。Iterator を使用するか、For ループを使用しますが、両方を同時に使用する必要はありません。

次のようにコードを書き直します。

Iterator<String> iter = collectionOfStrings.iterator();
while (iter.hasNext()) {
   String item = iter.next();
   ...
}

どう思いますか?

4

5 に答える 5

11

どちらのコードも、期待どおりの動作をするという意味で、「間違っている」わけではありません。2 番目のコードは同等ですがiter、ループの終了後も定義されたままになるため、ローカル変数を汚染します。

于 2013-03-18T13:52:44.837 に答える
5

どちらの例も構文的に正しいです。宣言を for ループに入れる利点の 1 つは、変数がコード ブロックの終了後に解放されるのに対し、反復子は while ループの終了後も存続することです。

于 2013-03-18T13:52:38.280 に答える
5

2番目は良いです。

最初のほうが少し良いです。ループ変数のスコープを制限します。

しかし、Java 1.5 以降、foreach ループは次のいずれよりも洗練されている場合があります。

for ( String item : collectionOfStrings ) {
   ...
}
于 2013-03-18T14:04:28.637 に答える
2

実は同じです。for は while の単なるバリエーション、または while は for の単なるバリエーションですが、好きなように言います。for を書くことができます

for (init;cond;incr){
...
}

このような

init
while(cond){
....
incr
}
于 2013-03-18T13:53:32.480 に答える
1

あなたの同僚は正しいです。forループを含む最初のコードは問題なく実行されるはずです。

実際、whileもループなので、あなたのコードと彼のコードの両方に 1 つのループと反復子が含まれています。

于 2013-03-18T13:51:52.590 に答える