== Why is this an issue?

A loop with at most one iteration is equivalent to an `if` statement.
This can confuse developers and make the code less readable since loops are not meant to replace `if` statements.

If the intention was to conditionally execute the block only once, an `if` statement should be used instead.
Otherwise, the loop should be fixed so the loop block can be executed multiple times.

A loop statement with at most one iteration can happen when a statement that unconditionally transfers control,
such as a jump or throw statement, is misplaced inside the loop block.

This rule arises when the following statements are misplaced:

* `break`
* `return`
* `throw`

== How to fix it

=== Code examples

==== Noncompliant code example

[source,java,diff-id=1,diff-type=noncompliant]
----
int i = 0;
while(i < 10) { // Noncompliant; loop only executes once
  System.out.println("i is " + i);
  i++;
  break;
}
----

[source,java,diff-id=2,diff-type=noncompliant]
----
for (int i = 0; i < 10; i++) { // Noncompliant; loop only executes once
  if (i == x) {
    break;
  } else {
    System.out.println("i is " + i);
    return;
  }
}
----

==== Compliant solution

[source,java,diff-id=1,diff-type=compliant]
----
int i = 0;
while (i < 10) {
  System.out.println("i is " + i);
  i++;
}
----

[source,java,diff-id=2,diff-type=compliant]
----
for (int i = 0; i < 10; i++) {
  if (i == x) {
    break;
  } else {
    System.out.println("i is " + i);
  }
}
----

== Resources

=== Documentation

* https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html[Oracle - The for Statement]

ifdef::env-github,rspecator-view[]

'''

== Implementation Specification

(visible only on this page)

include::../message.adoc[]

include::../highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

=== on 21 Nov 2024, 16:48:00 Alban Auzeill wrote:
[test-code-support-investigation-for-java] Decision for scope: Main -> All.

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
