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); }