导学

在之前的js学习中,我们同学也接触到了关于流程控制的内容,事实上流程控制就是我们日常生活中的实际应用,比如我们有时候做一件事会从头到尾的给做下去,有时候会根据实际情况选择做某件事情,有时候会不断重复的做某件事情。
那么,在我们的编程中也会存在类似的情况,本节课程我们就来学习如何去应用编程语法完成对流程的控制。

流程控制分类

  • 顺序结构
  • 判断(分支选择)结构
  • 循环结构

    顺序结构

    程序是一个自上而下运行的过程。

    分支选择结构

    Java 中的分支选择结构有 if 结构、switch 结构

    if 结构

    具备三种类型的结构表现形式

  • 形式一:

    1. if (logic expression) {
    2. statement;
    3. }

    示例:

    1. int age = 20;
    2. if (age > 18) {
    3. String name = "Tom";
    4. System.out.println("我叫" + name + ",已经" + age + "岁了,我成年了!");
    5. }
  • 形式二:

    1. if (logic expression) {
    2. statement;
    3. } else {
    4. statement;
    5. }

    示例:

    1. int age = 16;
    2. if (age > 18) {
    3. String name = "Tom";
    4. System.out.println("我叫" + name + ",已经" + age + "岁了,我成年了!");
    5. } else {
    6. System.out.println("我还未成年!");
    7. }
  • 形式三:

    1. if (logic expression) {
    2. statement;
    3. } else if (logic expression) {
    4. statement;
    5. } else {
    6. statement;
    7. }

    示例:

    1. if (age >= 0 && age <= 10) {
    2. System.out.println("少年");
    3. } else if (age <= 18) {
    4. System.out.println("青少年");
    5. } else if (age <= 30) {
    6. System.out.println("青年");
    7. } else if (age <= 50) {
    8. System.out.println("中年");
    9. } else {
    10. System.out.println("老年");
    11. }

    switch 结构

    swtich 语句是有控制表达式和多个 case 标签块组成。

    在控制表达式中,只允许出现 byte、short、int、char四种基础数据类型,在JDK1.7以后,支持 String 类型的控制表达式。

  1. switch (expression) {
  2. case condition1 : {
  3. statement;
  4. break;
  5. }
  6. case condition2 : {
  7. statement;
  8. break;
  9. }
  10. default : {
  11. statement;
  12. break;
  13. }
  14. }

示例:

  1. String color = "red";
  2. switch (color) {
  3. case "red": {
  4. System.out.println("红色");
  5. break;
  6. }
  7. case "blue": {
  8. System.out.println("蓝色");
  9. break;
  10. }
  11. case "green": {
  12. System.out.println("绿色");
  13. break;
  14. }
  15. default: {
  16. System.out.println("没有找到");
  17. break;
  18. }
  19. }

在 case 中要加入 break 关键字跳出; 在实际的开发中,我们一般使用 if - else 结构替代 switch。swtich 结构应用的较少。 switch是针对某一个变量及进行条件符合(该变量是否等同于case语句块中的举例)判断 break 使…停止 。在switch结构中,如果没有break存在,当进入某一个语句块中,会一直进入该语句块下面的case中执行业务逻辑

循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码。
被重复执行的代码叫做循环体
循环语句可能包含的部分有:

  • 初始化语句(init_statement):一条或多条语句,这些语句用于完成一些初始化的工作。
  • 循环条件(test_expression):是一个 boolean 类型的表达式,这个表达式决定是否继续执行循环体。
  • 循环体(body_statement):如果条件允许,循环体会被反复执行。
  • 迭代语句(iteration_statement):在一次循环体执行结束后,对循环体条件进行求值,通常用于控制循环条件中的变量,使得循环在合适的时候结束。

    while 结构

    1. (init_statement);
    2. while (test_expression) {
    3. body_statement;
    4. [iteration_statement];
    5. }
    示例:
    1. int sum = 0;
    2. int i = 1;
    3. while (i <= 10) {
    4. sum = sum + i;
    5. i++;
    6. }
    7. System.out.println(sum); // 55

    do-while 结构

    1. (init_statement);
    2. do {
    3. body_statement;
    4. [iteration_statement];
    5. } while (test_expression)

    无论如何都会执行一次循环体内容 示例:

  1. int i = 1;
  2. int sum = 0;
  3. do {
  4. sum += i++;
  5. // sum = sum + i;
  6. // i = i + 1;
  7. } while (i <= 10);
  8. System.out.println(sum); // 11

for 循环

语法:

  1. for ([init_statement]; test_expression; [iteration_statement]) {
  2. body_statement;
  3. }

示例:

  1. int sum = 0;
  2. for (int i = 1; i <= 28; i++) {
  3. sum = sum + i;
  4. }
  5. System.out.println(sum);

在实际的开发中,对于已知循环次数的遍历,一般使用 for 循环。而且 for 循环的应用场景要比 while 循环多。

控制循环结构

break:在循环体中,使用 break 关键字跳出整个循环

  1. int flag = 6;
  2. int sum = 0;
  3. for (int i = 1; i <= 10; i++) {
  4. sum = sum + i;
  5. if (i == flag) {
  6. break;
  7. }
  8. }
  9. System.out.println(sum); // 21

continue:在循环体中,使用 continue 跳出本次循环,循环还会继续执行。

  1. int sum = 0;
  2. for (int i = 1; i <= 10; i++) {
  3. if (i % 2 == 0) {
  4. continue;
  5. }
  6. sum = sum + i;
  7. }
  8. System.out.println(sum); // 25

程序调试-debug

开发人员经常会在开发程序的时候出现错误。那么,如何快速的找出错误,就成为开发人员重要的一项技能。
我们把错误通常称为bug,而把找错误叫做debug。
对于找错误,我们通常会采用调试这一方法,它的作用在于能让程序员看清楚程序每一步的效果,在需要查看结果的时候,使用debug查看实际结果是否与预期结果一致。

注意:编译的错误,开发工具一般会自动的报错,我们一般对程序进行调试是为了找出逻辑上的错误。 错误类型: 编译错误:代码语法错误,无法通过编译器编译,eclipse等IDE开发工具会直接报红 运行错误:代码没有任何的报错,只有运行的时候才会报错

  1. 我们以这段代码为例,进行调试
  2. public static void main(String[] args) {
  3. int sum = 0;
  4. for(int n = 1; n <= 5; n++) {
  5. sum = sum + n;
  6. //输出sum的值
  7. System.out.println("sum=" + sum);
  8. }
  9. System.out.println("sum=" + sum);
  10. }

步骤:

  1. 设置断点(断点是指程序运行到点的位置就终止了,断点可以设置多个)
    4.Java流程控制 - 图1
    比如想要查看sum的值,就可以在蓝色区域双击,就会出现一个小点,这就是断点。双击和鼠标右键选择也可以取消断点。
  2. 选择调试运行
    4.Java流程控制 - 图2
    鼠标右键选择调试运行,或选择如图所示的调试运行的运行按钮。
  3. 打开debug视图
    4.Java流程控制 - 图3
  4. 视图作用
    4.Java流程控制 - 图4
  5. 快捷键调试
    1. F5进入函数,单步调试
    2. F6不进入函数,单步调试
    3. F7由函数内部,返回调用处
    4. F8一直执行到下个断点处,直到终止调试