Java学习之路——流程控制

93 阅读4分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

程序流程控制

  1. 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
  2. 其流程控制方式采用结构化程序设计中规定的三种基本流程控制,即:
    • 顺序结构。
      • 程序从上到下逐行地执行,中间没有任何判断和跳转。
    • 分支结构。
      • 根据条件,选择性地执行某段代码。
      • 有 if-else 和 switch-case 两种分支语句。
    • 循环结构。
      • 根据循环条件,重复性的执行某段代码。
      • 有 while、do...while、for 三种循环语句。
      • 注:JDK 1.5 提供了 foreach 循环,方便的遍历集合、数组元素。

顺序结构

  • 程序默认都是自上而下执行代码。

分支语句 1:if-else 结构

  1. if 语句三种格式:

    • if(条件表达式){
        执行代码块;
      }
      
    • // 二选一
      
      if(条件表达式){
        执行代码块1;
      }else{
        执行代码块2;
      }
      
    • // 多选一
      
      if(条件表达式1){
        执行代码块1;
      }else if(条件表达式2){
        执行代码块2;
      }...else{
        执行代码块 n;
      }
      
  2. if-else 使用说明:

    • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
    • 语句块只有一条执行语句时,一对儿{}可以省略,但建议保留。
    • if-else 语句结构,根据需要可以嵌套使用。
    • 当 if-else 结构是“多选一”时,最后的 else 是可选的,根据需要可以省略。
    • 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓。
    • 当多个条件是“包含”关系时,“小上大下 / 子上父下”。
  3. 如何从键盘获取不同类型的变量:需要使用 Scanner 类。

    • 导包:import java.util.Scanner;

    • Scanner 的实例化:Scanner scan = new Scanner(System in);

    • 调用 Scanner 类的相关(next() / nextXxx())方法,来获取指定类型的变量。

      import java.util.Scanner;
      class ScannerTest{
        public static void main(String[] args){
          Scanner scan = new Scanner(System in);
          int num = scan.nextInt();
          System.out.println(num);
        }
      }
      

分支语句2:switch-case 结构

  1. 格式:

    switch(表达式){
      case 常量1:
        语句1;
        break
      case 常量2:
        语句2;
        break;
        ...
      case 常量n:
        语句n;
        break;
      default:
        语句;
        break;
    }
    
  2. 说明:

    • 根据 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 是可选的,而且位置是灵活的。
    • 凡是可以使用 switch-case 的结构,都可以转换为 if-else 结构,反之则不成立。
    • switch-case 中的情况不能太多。

循环结构

  1. 循环结构:
    • 在某些条件满足的情况下,反复执行特定代码的功能。
  2. 循环语句分类:
    • for 循环。
    • while 循环。
    • do-while 循环。
  3. 循环语句的四个组成部分:
    • 初始化部分( init_statement )
    • 循环条件部分( test_exp ) --> 是 Boolean 类型。
    • 循环体部分( body_statement )
    • 迭代部分( alter_statement )

循环结构 1:for 循环

  1. 用法:

    for(int i = 1;i <= 5000;i++){	// 初始化部分	// 循环条件	// 迭代部分
      System.out.println("Hello World!");	// 循环体
    }
    

循环结构 2:while 循环

  1. 结构:

    int i = 1;	// 初始化部分
    while(i<5000){	// 循环条件
      // 循环体
      Syetem.out.println("Hello World!");
      // 迭代部分
      i++
    }
    
  2. 说明:

    • 写 while 循环不能丢了迭代条件,如果丢了会导致死循环。
    • 写程序要避免死循环。
    • for 循环和 while 循环是可以相互转换的,但是它们的初始化作用域不同。
    • 出了 while 循环, i 仍然可以调用。

循环结构3:do-while 循环

  1. 结构:

    int i = 1;	// 初始化部分
    do{
      // 循环体
      System.out.println("Hello World!");
      // 迭代部分
      i++;
    }while(i<5000)	// 循环条件
    
  2. 说明:

    • do-while 至少会执行一次循环体。
    • 开发中,使用 for 和 while 的会更多一些,较少使用 do-while 。

嵌套循环

  1. 将一个循环结构(A)声明在另一个循环结构(B)的循环体中,就构成了嵌套循环。

  2. 外层循环:循环结构(B)。

    内层循环:循环结构(A)。

    for(int j = 1;j <= 4;j++){
      for(int i = 1;i<=6;i++){
        System.out.println("*");
      }
      System.out.println();
    }
    
  3. 内层循环结构遍历一遍,外层循环结构循环体执行一遍。

特殊关键字的使用:continue 和 break

关键词适用范围在循环中使用的作用相同点
breakswitch-case
循环结构
结束当前循环关键字后面不能声明执行语句
默认跳出包裹此关键字最近的一层循环
continue循环结构结束当次循环关键字后面不能声明执行语句
默认跳出包裹此关键字最近的一层循环的当次循环

结束指定的循环

label:for(int i = 1;i <= 4;i++){
  for(int j = 1;j <= 10;j++){
    if(j % 4 == 0){
      break label;
      // continue label;
    }
  }
}

附加:特殊流程控制语句

  1. return:并非专门用于结束循环,功能是结束一个方法。当一个方法执行到一个 return 语句时,这个方法将被结束。
  2. 与 break 和 continue 不同的是,return 直接结束整个方法,不管这个 return 处于多少层循环之内。