for文のネスト(多重ループ)をするときの注意点です。
まず、ネストは多くても3段までにしましょう(できれば2段まで)。
これ以上にすると複雑過ぎて保守が困難になります。
メソッド化するなり、何らかの対処が可能なはずです。
for (int i = 0; i < parents.size(); i++) {
Object parent = parents.get(i);
for (int k = 0; k < 20; k++) { // i++ と間違えない事
Object child = parent.get(k); // [i] と間違いない事
...
}
}
2つ目以降のネストでは、対象となる変数を間違えないように注意が必要です。
PMD : JumbledIncrementer
FindBugs : QF: Complicated,subtle or wrong increment in for-loop
JDK5では、拡張ループ構文を使うことで以下のような記述が可能です。
for (Object parent : parents) {
for (Object child : parent) {
...
}
}
こうすれば、変数の記述間違いは発生しません。
これも、あまり深くならないようにしましょう。
CheckStyle : NestedIfDepth / NestedTryDepth
これらはどちらもループ構文であり、相互に書き換える事が可能です。
// Type 1
for (i = 0; i < 10; i++) {
...
}
// Type 2
i = 0;
while (i < 10) {
...
++i;
}
for文は3つの式を使うので、while文よりは複雑な使い方が可能です。
while文は1つの式しか使わないのでよりシンプルです。
PMD : ForLoopShouldBeWhileLoop