【Java】编程基础之流程控制语句以及循环结构

一、前言

在本文中,我们将介绍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
}

说明:

  1. else 结构是可选的,可以根据需要省略。
  2. 如果多个条件表达式之间是"互斥"关系(没有交集),哪个判断和执行语句声明在上面还是下面,无所谓。
  3. 如果多个条件表达式之间有交集,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
  4. 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面,否则,范围小的就没有机会执行。
  5. if-else 结构是可以相互嵌套的。
  6. 如果 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;
}

说明:

  1. 根据 switch 表达式中的值,依次匹配各个 case 中的常量。一旦匹配成功,则进入相应 case 结构中,调用其执行语句。 当调用完执行语句后,则仍然继续向下执行其他 case 结构中的执行语句,直到遇到 break 关键字或此 switch-case 结构末尾结束为止。
  2. break 可以使用在 switch-case 结构中,表示一旦执行到此关键字,就跳出 switch-case 结构。
  3. switch 结构中的表达式只能是以下 6 种数据类型之一:byteshortcharint、枚举类型(JDK 5.0 新增)、String 类型(JDK 7.0 新增)。
  4. case 之后只能声明常量,不能声明范围。
  5. break 关键字是可选的。
  6. default: 相当于 if-else 结构中的 elsedefault 结构是可选的,而且位置是灵活的。

举例如下:

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中,循环结构是一种重要的程序设计方式,它允许我们重复执行一段代码块,直到满足特定条件。循环结构的四要素包括:

  1. 初始化条件:在循环开始前执行一次的代码,通常用于初始化计数器(循环控制变量)或其他必要的变量。
  2. 循环条件 :在每次迭代开始时被评估。如果条件为true,循环体将执行;如果条件为false,循环将终止。如果循环条件最初为假,循环体将不会执行。
  3. 循环体:由一段代码组成,表示循环需要重复执行的任务,只有在循环条件为真时才会执行。
  4. 迭代条件:在每次循环迭代结束时执行。通常用于更新计数器(循环控制变量)或进行其他必要的迭代操作。

通常情况下,循环结束是因为循环条件返回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循环

  1. 在实际开发中,我们通常会从forwhile循环中进行选择,来实现不同的循环结构。for循环和while循环是可以相互转换的!唯一的区别是while循环的初始化条件作用范围更广。
  2. for循环通常用于遍历集合或序列,如列表、元组或字符串,它会在每次迭代中取出集合中的一个元素并执行循环体。for循环的循环次数取决于集合的长度。
  3. while循环则用于在满足某个条件的情况下重复执行循环体。它的循环次数不是由集合的大小决定的,而是由循环条件的判断结果决定的。

(4)do-while循环

格式如下:

java 复制代码
初始化条件;
do {
    循环体;
    迭代条件;
} while (循环条件);

执行过程:初始化条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 -> 迭代条件 -> ... -> 循环条件

注意

  1. do-while循环至少会执行一次循环体,因为它是先执行循环体,再检查循环条件。
  2. 在开发中,我们更常使用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 中,breakcontinue 是两个常用的循环控制关键字,它们用于在循环中进行流程控制。

(1)break

  1. 使用范围break 关键字通常用于循环结构和 switch-case 结构中。
  2. 循环中使用的作用 :在循环结构中,break 用于立即结束当前循环,跳出循环体,并继续执行循环后面的代码。
  3. 不同点
    • switch-case 结构中,break 用于跳出 switch 结构,防止执行其他 case 分支代码。
    • 在循环结构中,break 用于结束当前循环,不再执行循环体内后续的代码,直接跳出循环。
  4. 相同点break 关键字后面不能声明执行语句,因为在它之后的代码都不会被执行。

(2)continue

  1. 使用范围continue 关键字仅用于循环结构中。
  2. 循环中使用的作用continue 用于结束当前循环的当前迭代,即跳过循环体内 continue 后面的代码,直接进行下一次迭代。
  3. 不同点continue 并不会终止整个循环,而是终止当前迭代,进入下一次循环迭代。
  4. 相同点 :与 break 一样,continue 关键字后面不能声明执行语句。

(3)"无限循环"

"无限循环"是指循环条件永远为真的循环,常用两种写法:

  1. 使用while(true)循环。
  2. 使用for(;;)循环。

在循环体中,可以使用break语句可以手动终止循环。


三、总结

总的来说,条件分支结构和循环结构是编写Java程序的基本工具,它们使我们能够根据不同的条件和需求编写灵活的代码。了解这些结构和关键字的使用将有助于编写更具逻辑性和效率的代码。

相关推荐
Kali_075 分钟前
使用 Mathematical_Expression 从零开始实现数学题目的作答小游戏【可复制代码】
java·人工智能·免费
rzl0216 分钟前
java web5(黑马)
java·开发语言·前端
君爱学习22 分钟前
RocketMQ延迟消息是如何实现的?
后端
guojl36 分钟前
深度解读jdk8 HashMap设计与源码
java
Falling4240 分钟前
使用 CNB 构建并部署maven项目
后端
guojl41 分钟前
深度解读jdk8 ConcurrentHashMap设计与源码
java
程序员小假1 小时前
我们来讲一讲 ConcurrentHashMap
后端
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker1 小时前
taoker的项目维护(ng服务器)
java·开发语言