2016-02-04 13 views
6

私は最近、forループのJavaにおける非カウンタ関連の条件の使用についての議論を行った:FOR-ための任意の「公式」の規則があるかどうforループ条件の規則

for(int i = 0; o.getC() < 10; i++) 
    o.addC(i); 

誰もが知っていますこのような条件?

int i = 0; 
while(o.getC() < 10) { 
    i++; 
    o.addC(i); 
} 

またはさらに悪い:

int i = 0; 
while(o.getC() < 10) 
    o.addC(++i); 
+1

カウンター以外の条件とはどういう意味ですか?これは間違いなくカウンター関連です。 –

+1

forループは、好ましくは(IMO)です。これは、1) 'i'がループにスコープされているためです。 2)各反復で「i」をインクリメント(または明示的にインクリメントしない)することを忘れないように強制されます。ここでの2番目と3番目のオプションは特別なメリットはありませんし、読みにくくなっています(特に 'o.addC(++ i);')。 –

+0

[ループではなくループ中に使用する場合]の複製が可能です(http://stackoverflow.com/questions/6710601/when-to-use-while-loop-rather-than-for-loop) –

答えて

1

for相当の状況では、ほぼすべての状況でループが使用されます。while解決策配列、リスト、標準データ構造。一方while

一般的にストリームにし、無限に長い反復のために使用されている。..

0

forループのいいところ、すべてのループのパラメータが最初の行にまとめているので、私の意見では、whileループと等価に比べて読みやすいですショートカット方法がありますか?したがって、配列内のすべての項目を処理したい場合は、次のようにします。

(double number:arrayName) ここで、doubleは型です。numberは各要素に与える名前です(それはdoesn '実際にあなたが呼んでいるものは、ここではそれぞれの値を「番号」と呼ぶことにします)。 arrayNameはあなたが参照している配列の名前です。

各要素/オブジェクトに到達したい場合は、これが最速の方法です。

+0

これは拡張forループと呼ばれています。 (私はそれをforeachループと呼んでいます)。実際には、スピードの点では「最速」ではありません。なぜなら、フードの下では型変換を実行しなければならず、通常のforループを使用するからです。 –

+0

ああ申し訳ありませんが、私は自分自身で新しいプログラマーです。しかし私ができることを助けようとしていた:p –

0

方法について:ADDCは本当にあなたが期待する何をされていない場合

for(int i = 0; i < MAX_ITERATIONS; i++) 
{ 
    o.addC(i); 
    if (o.getC() >= 10) 
     return o; // or break 
} 

これは無限ループを防止します。

1

ほとんどの開発者は、三つから構成するfor文を期待します:変数 の

  • 初期化
  • 変数に基づく終了条件
  • 変数のインクリメント

予期せぬものが含まれるようにコードを変更すると、読みにくくなり、保守が困難になります。

さらに、私はwhileループがあなたの意図が明確になり思う:o.getC()は10その後、小さいながらは何かをします。この「何か」は次のようになります。増分番号を追加します。

ロングストーリーショート: "カウンター以外の関連条件"にはwhileループを使用してください。

関連する問題