Java 中循环控制结构有 3 种形式:for
、while
、do-while
。
1. 循环语句
1.1 for循环
for
循环的标准结构比较简单,包含循环变量的定义、终止条件以及循环体,我们直接来看一个示例:
public class LoopFor {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("This loop is " + i);
}
}
}
1.1.1 for循环变体
当然,我们也可以将循环变量定义在外面,或者将循环体定义在大括号里面:
public class LoopFor {
public static void main(String[] args) {
int i = 1;
for (; i <= 5; i++;) {
System.out.println("This loop is " + i);
}
}
}
public class LoopFor {
public static void main(String[] args) {
int i = 1;
for (; i <= 5;) {
System.out.println("This loop is " + i);
i++;
}
}
}
🔔 其他的改写形式可以自行尝试一下。
1.2 foreach
对于for
循环而言,还有一种foreach
的形式(也叫做增强for
循环),这个其实是集合的一种遍历形式:
public class LoopForeach {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
for (int num : nums) {
System.out.println(num);
}
}
}
1.3 嵌套for循环
嵌套for
循环其实很简单,在for
循环中再嵌套一个for
循环,下面我们实现一个九九乘法表:
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + i*j + " ");
}
System.out.println();
}
🔔 嵌套
for
循环建议最多 3 层,否则算法的时间和空间复杂度会变得很高。
1.4 给for循环打标签
在嵌套for
循环中,如果我们想要跳出外层for
循环,这需要给for
循环打上标签,然后使用break <tag>
来跳出外层for
循环。
public class ForTag {
public static void main(String[] args) {
loop: for (int i = 0; i < 10; i ++) {
for (int j = 1; j < 5; j ++) {
if (i == 3 && j == 3) {
break loop;
}
System.out.println("i=" + i + ", j= " + j);
}
}
}
}
2. while
while
循环其实和for
循环很相似,不一样的点是在于循环变量的定义和循环体的位置:
public class LoopWhile {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
}
}
如果终止条件修改为true
,则表示一直循环且不会终止,除非在循环体中手动break
。
3. do-while
do-while
只是while
的一种变种,两者的区别在于:
while
是先判断终止条件是否满足,如果不满足的话就进入循环do-while
是先进行循环,然后判断终止条件是否满足,不满足的话就继续进入循环,也就说do-while
一定会进行至少 1 次循环。
public class LoopDoWhile {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
} while (i < 1);
}
}
4. break / continue
在上面循环示例中,我们演示了在某些情况下可能想要跳过本次循环,继续下一次循环,或者提前结束掉全部循环。
Java 给我们提供了break
和continue
来完成对应的功能,且这两者都可以在for
、while
、do-while
循环中进行使用,其中:
continue
:退出本次循环,继续下一次循环break
:退出全部循环
那么如果我们使用的是嵌套for
循环的话,则使用break <tag>
来跳出