一、前言
在本文中,我们将介绍Java中的条件分支结构和循环结构,以及它们的应用和区别。条件分支结构包括if-else判断和switch-case选择,用于根据条件执行不同的代码块。循环结构包括for循环、while循环和do-while循环,用于重复执行一段代码,直到满足特定条件。最后,我们还讨论了break和continue关键字,用于在循环中进行流程控制。
二、内容
2.1 条件分支结构
(1)if-else 判断
结构一:
java
if (条件表达式) {
// 执行表达式
}
结构二:
java
if (条件表达式) {
// 执行表达式1
} else {
// 执行表达式2
}
结构三:
java
if (条件表达式1) {
// 执行表达式1
} else if (条件表达式2) {
// 执行表达式2
} else if (条件表达式3) {
// 执行表达式3
}
// ...
else {
// 执行表达式n
}
说明:
else
结构是可选的,可以根据需要省略。- 如果多个条件表达式之间是"互斥"关系(没有交集),哪个判断和执行语句声明在上面还是下面,无所谓。
- 如果多个条件表达式之间有交集,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
- 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面,否则,范围小的就没有机会执行。
if-else
结构是可以相互嵌套的。- 如果
if-else
结构中的执行语句只有一行时,对应的一对{}
可以省略(但不建议省略)。
下面是一个简单的例子:
java
public class IfElseExample {
public static void main(String[] args) {
int number = 10;
if (number > 0) {
System.out.println("这个数字是正数。");
} else if (number < 0) {
System.out.println("这个数字是负数。");
} else {
System.out.println("这个数字是零。");
}
}
}
(2)switch-case 选择
格式如下:
java
switch (表达式) {
case 常量1:
// 执行语句1;
// break;
case 常量2:
// 执行语句2;
// break;
// ...
default:
// 执行语句n;
// break;
}
说明:
- 根据
switch
表达式中的值,依次匹配各个case
中的常量。一旦匹配成功,则进入相应case
结构中,调用其执行语句。 当调用完执行语句后,则仍然继续向下执行其他case
结构中的执行语句,直到遇到break
关键字或此switch-case
结构末尾结束为止。 break
可以使用在switch-case
结构中,表示一旦执行到此关键字,就跳出switch-case
结构。switch
结构中的表达式只能是以下 6 种数据类型之一:byte
、short
、char
、int
、枚举类型(JDK 5.0 新增)、String
类型(JDK 7.0 新增)。case
之后只能声明常量,不能声明范围。break
关键字是可选的。default:
相当于if-else
结构中的else
。default
结构是可选的,而且位置是灵活的。
举例如下:
java
import java.util.Scanner;
public class WeekdayExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入星期几(1-7): ");
int day = scanner.nextInt();
String dayName;
switch (day) {
case 1:
dayName = "星期一";
break;
case 2:
dayName = "星期二";
break;
case 3:
dayName = "星期三";
break;
case 4:
dayName = "星期四";
break;
case 5:
dayName = "星期五";
break;
case 6:
dayName = "星期六";
break;
case 7:
dayName = "星期日";
break;
default:
dayName = "无效的输入";
break;
}
System.out.println("今天是" + dayName);
}
}
小结,在条件判断结构中:
if-else
结构适合处理多个不同条件的情况,而switch-case
结构适合处理多个不同值对应相同执行语句的情况。根据具体的情况选择合适的条件判断结构,可以让代码更加简洁和易于理解。在if-else
结构中,可以进行更加复杂的条件判断,而在switch-case
结构中,适合对特定值进行分支选择。
2.2 循环结构
(1)循环四要素
在Java中,循环结构是一种重要的程序设计方式,它允许我们重复执行一段代码块,直到满足特定条件。循环结构的四要素包括:
- 初始化条件:在循环开始前执行一次的代码,通常用于初始化计数器(循环控制变量)或其他必要的变量。
- 循环条件 :在每次迭代开始时被评估。如果条件为
true
,循环体将执行;如果条件为false
,循环将终止。如果循环条件最初为假,循环体将不会执行。 - 循环体:由一段代码组成,表示循环需要重复执行的任务,只有在循环条件为真时才会执行。
- 迭代条件:在每次循环迭代结束时执行。通常用于更新计数器(循环控制变量)或进行其他必要的迭代操作。
通常情况下,循环结束是因为循环条件返回false
。
(2)for 循环
格式如下:
java
for (初始化条件; 循环条件; 迭代条件) {
循环体;
}
执行过程:初始化条件 -> 循环条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 -> 迭代条件 -> ... -> 循环条件
举一个简单的例子:
java
public class ForLoopExample {
public static void main(String[] args) {
// 创建一个整数数组
int[] numbers = {1, 2, 3, 4, 5};
// 初始化一个变量来保存总和
int sum = 0;
// 使用for循环遍历数组并计算总和
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
// 打印计算出的总和
System.out.println("数组元素的总和是: " + sum);
}
}
(3)while 循环
格式如下:
java
初始化条件;
while (循环条件) {
循环体;
迭代条件;
}
执行过程:
- 初始化条件 -> 循环条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 -> 迭代条件 -> ... -> 循环条件
注意:写while循环时一定要小心不要忘记迭代条件,否则可能导致死循环!
举例如下:
java
public class WhileLoopExample {
public static void main(String[] args) {
int i = 1; // 初始化计数器
while (i <= 5) { // 循环条件:i必须小于等于5
System.out.println("当前数字是: " + i);
i++; // 更新计数器,加1
}
}
}
for 循环 VS while循环:
- 在实际开发中,我们通常会从
for
和while
循环中进行选择,来实现不同的循环结构。for
循环和while
循环是可以相互转换的!唯一的区别是while
循环的初始化条件作用范围更广。for
循环通常用于遍历集合或序列,如列表、元组或字符串,它会在每次迭代中取出集合中的一个元素并执行循环体。for
循环的循环次数取决于集合的长度。while
循环则用于在满足某个条件的情况下重复执行循环体。它的循环次数不是由集合的大小决定的,而是由循环条件的判断结果决定的。
(4)do-while循环
格式如下:
java
初始化条件;
do {
循环体;
迭代条件;
} while (循环条件);
执行过程:初始化条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 -> 迭代条件 -> ... -> 循环条件
注意:
- do-while循环至少会执行一次循环体,因为它是先执行循环体,再检查循环条件。
- 在开发中,我们更常使用for和while循环,较少使用do-while循环。
举例如下:
java
import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number;
do {
System.out.print("请输入一个数字 (等于 0 时退出循环): ");
number = scanner.nextInt();
System.out.println("你输入的数字等于" + number);
} while (number != 0);
System.out.println("循环结束......");
scanner.close();
}
}
(5)练习题
- 练习一:打印星号矩形
java
public class Test {
public static void main(String[] args) {
// 打印一个4行6列的星号矩阵
for (int j = 1; j <= 4; j++) {
for (int i = 1; i <= 6; i++) {
System.out.print('*');
}
System.out.println();
}
}
}
运行结果:
java
******
******
******
******
- 练习二:打印星号三角形
java
public class Test {
public static void main(String[] args) {
// 打印一个5行的星号三角形
for (int i = 1; i <= 5; i++) { // 控制行数
for (int j = 1; j <= i; j++) { // 控制列数
System.out.print("*");
}
System.out.println();
}
}
}
运行结果:
java
*
**
***
****
*****
- 练习三:打印九九乘法表
这是一个稍微复杂一点的嵌套循环,输出九九乘法表:
java
public class Test {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i * j) + " ");
}
System.out.println();
}
}
}
运行结果:
java
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
- 练习四:100以内的质数
java
public class Test {
public static void main(String[] args) {
// 打印100以内的质数
for (int num = 2; num <= 100; num++) {
boolean isPrime = true; // 假设当前数字是质数
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
isPrime = false; // 若能整除,则不是质数
break; // 跳出内层循环
}
}
if (isPrime) {
System.out.println(num);
}
}
}
}
运行结果:
bash
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
2.3 break 和 continue
在 Java 中,break
和 continue
是两个常用的循环控制关键字,它们用于在循环中进行流程控制。
(1)break
- 使用范围 :
break
关键字通常用于循环结构和switch-case
结构中。 - 循环中使用的作用 :在循环结构中,
break
用于立即结束当前循环,跳出循环体,并继续执行循环后面的代码。 - 不同点 :
- 在
switch-case
结构中,break
用于跳出switch
结构,防止执行其他case
分支代码。 - 在循环结构中,
break
用于结束当前循环,不再执行循环体内后续的代码,直接跳出循环。
- 在
- 相同点 :
break
关键字后面不能声明执行语句,因为在它之后的代码都不会被执行。
(2)continue
- 使用范围 :
continue
关键字仅用于循环结构中。 - 循环中使用的作用 :
continue
用于结束当前循环的当前迭代,即跳过循环体内continue
后面的代码,直接进行下一次迭代。 - 不同点 :
continue
并不会终止整个循环,而是终止当前迭代,进入下一次循环迭代。 - 相同点 :与
break
一样,continue
关键字后面不能声明执行语句。
(3)"无限循环"
"无限循环"是指循环条件永远为真的循环,常用两种写法:
- 使用
while(true)
循环。 - 使用
for(;;)
循环。
在循环体中,可以使用break
语句可以手动终止循环。
三、总结
总的来说,条件分支结构和循环结构是编写Java程序的基本工具,它们使我们能够根据不同的条件和需求编写灵活的代码。了解这些结构和关键字的使用将有助于编写更具逻辑性和效率的代码。