Loop counters should not be modified in the body of the loop. However other loop control variables representing logical values may be modified in the loop, for example a flag to indicate that something has been completed, which is then tested in the for statement.
The following code:
String[] names = new String[]{ "Jack", "Jim", null, "John" };
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
i = names.length; // Non-Compliant
} else {
System.out.println(names[i]);
}
}
should be refactored into:
String[] names = new String[]{ "Jack", "Jim", null, "John" };
for (String name: names) {
if (name == null) {
break; // Compliant
}
System.out.println(name);
}