重学Java-第九章 Java循环语句
为什么要使用循环语句,例如要在控制台打印1到5,那么就是
System.out.println("1");
System.out.println("2");
...
这样就会存在以下问题:
· 不灵活:需求变更就需要逐行修改
· 难以维护:容易产生bug
· 伸缩性差:需要写大量代码
这时就需要循环语句来救场了。
9.1 while
9.1.1 语法
while循环是最简单的循环形式,其结构如下:
while (条件) {
// 循环体,条件成立时执行
...
}
// 循环完成后执行
9.1.2 实例
// 控制台打印从1到5
public class WhileLoop1 {
public static void main(String args[]) {
int i = 1;
while (i <= 5) {
System.out.println(i); // 打印i
i ++; // i自增1
}
}
}
使用循环语句时,需要有一个变量来控制循环语句块的执行,例如上述实例的变量i,每次执行完打印语句后,i都自增1,当满足i <= 5 条件时,就结束循环语句块的执行。若没有i ++; 那么i的值永远都是1,执行循环语句块的条件永远满足,控制台就会一直打印,直到将资源耗尽才会停止,这就是所谓的死循环。
9.2 do while
9.2.1 语法
do while循环的功能和while循环类似,不同点在于:while循环先判断条件,在执行循环体;而do while循环则是先执行循环体,再判断条件,如果条件成立继续执行循环,条件不成立则终止循环。总结就是:无论条件是否成立,do while循环都会执行一次,而while循环可能一次都不执行。
do while语法结构如下:
do {
// 循环体
} while (条件);
9.2.2 实例
// 实现1到100的累加求和
public class DoWhileLoop {
public static void main(String[] args) {
int sum = 0; // 累加和
int i = 1;
do {
sum = sum + i; // 使sum和i相加,并将值再次赋值给sum
i ++; // i自增1
} while (i <= 100);
System.out.println("1到100的累加和为:" + sum);
}
}
9.3 for循环
9.3.1 语法
for循环是一种特殊的while循环,它使用计数器来实现循环,是使用最广泛的循环语句。在关键字for后的括号中,有三条语句,第一条=语句是声明变量语句,允许声明一个或多个整型变量;第二条语句是条件,条件的检测方式与while循环相同(每次循环开始前判断条件是否成立);第三条语句是迭代语句,通常是变量递增或递减语句。其语法结构如下:
for (变量声明; 条件; 迭代语句) {
// 循环体
}
9.3.2 实例
// for循环实现1到100的累加求和
public class ForLoop {
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
}
}
在执行循环体前,先执行for括号中的变量声明语句,int i = 0; 定义了一个计数器变量i并赋值为0(在整个循环中只执行一次)。之后会进行条件判断i <= 100,显然条件成立,执行循环体sum += i;即 sum = sum + i, 循环体执行完之后执行括号的第三条语句i++,此时第一次循环结束。再次判断条件i <= 100是否成立,继续执行循环体,执行i++。直到i自增为101,此时不满足条件,不执行循环体,循环结束。
9.4 for each循环
for each主要用于数组和集合的遍历,将会在Java数组章节中讲解。
9.5 break和continue关键字
可以使用break和continue语句来重定向执行流。
9.5.1 break
break关键字可以出现在一个循环语句中,用以跳出当前循环。实例如下:
public class BreakKeywords {
public static void main(String[] args) {
for (int i = 1; i <= 10; i ++) {
if(i == 3) { // 条件语句
System.out.println("当i等于3时,终止循环!");
break;
}
System.out.println(i);
}
}
}
在多层循环中,break语句只能终止自己所在的那一层循环,不会影响到外层循环。
public class BreakKeywords2 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i ++) {
// 打印i的值
System.out.println(i);
for (int j = 1; j<=5; j ++) {
if(j == 3) { // 条件语句
System.out.println("当j等于3时,终止循环!");
break;
}
// 打印j的值
System.out.println(j);
}
}
}
}
9.5.2 continue
continue关键字可以跳出当次循环,继续执行下一次循环。实例如下:
public class ContinueKeywords {
public static void main(String[] args) {
for (int i = 1; i <= 5; i ++) {
if(i == 3) {
System.out.println("当i等于3时,跳过~");
continue;
}
System.out.println(i);
}
}
}
// 运行结果
1
2
当i等于3时,跳过~
4
5
当i==3时,满足if语句的条件,执行了打印跳过语句和continue语句,结束了当次循环,所以没有执行 System.out.println(i); 然后继续执行下一次循环,输出4和5。