JavaSE基础学习(五)——流程控制语句和跳转控制语句

1.流程控制语句

1.1 概述

对于我们人来说有很多个需要选择的时候,对于程序来说也是这样子的。在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接的影响的。也就是说程序的流程对运行结果是有直接的影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

分类

  • 顺序结构
  • 选择结构
  • 循环结构

1.2 顺序结构

1.2.1 概述

程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。总的来说,写在前面的先执行,写在后面的后执行。

1.2.2 顺序结构图

package com.study.demo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class ProcessDemo {

    public static void main(String[] args) {
        System.out.println("开始");
        System.out.println("语句A");
        System.out.println("语句B");
        System.out.println("结束");
    }
}

1.3 选择结构

1.3.1 概述

  • 选择结构也被成为分支结构
  • 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
  • Java语言提供了两种选择结构语句
    • if 语句
    • switch 语句

1.3.2 选择结构 if

if 语句有三种格式

  • if 语句1格式

if(关系表达式){

      语句体;

}

  • 执行流程

首先判断关系表达式看其结果是 true 还是 false

如果是 true 就执行语句体

如果是 false 就不执行语句体

  • 流程图

 

package com.study.demo.ifdemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class IfDemo01 {

    public static void main(String[] args) {
        System.out.println("开始");
        // 定义两个变量
        int a = 10;
        int b = 20;
        if(a==b){
            System.out.println("a等于b");
        }
        int c = 10;
        if(a==c){
            System.out.println("a等于c");
        }
        System.out.println("结束");
    }
}
  • if 语句2格式

if(关系表达式){

                  语句体1;

            }else{

                   语句体2;

            }

  • 执行流程

首先判断关系表达式看其结果是 true 还是 false

如果是 true 就执行语句体 1

如果是 false 就执行语句体 2

  • 流程图

package com.study.demo.ifdemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class IfDemo02 {

    public static void main(String[] args) {
        System.out.println("开始");
        // 定义两个变量
        int a = 100;
        // 经过一系列的逻辑...最后a的值被修改成99
        a = 99;
        if (a % 2 == 0) {
            System.out.println("a能被2整除,所以a是偶数");
        }else{
            System.out.println("a不能被2整除,所以a是奇数");
        }
        System.out.println("结束");
    }
}
  • if 语句3格式

if(关系表达式 1){

                  语句体1;

            }else if(关系表达式 2 ){

                   语句体2;

            }

           ......

            }else if(关系表达式 n){

                   语句体n;

            }else{

                   语句体n+1;

            }

  • 执行路程

首先判断关系表达式 1 看其结果是 true 还是 false

如果是 true 就执行语句体 1

如果是 false 就继续判断关系表达式 2 看其结果是 true 还是 false

如果是 true 就执行语句体 2

如果是 false 就继续判断关系表达式…看其结果是 true 还是 false

如果没有任何关系表达式为 true,就执行语句体 n+1

  • 流程图

例:键盘录入学生考试成绩,判断学生等级
       90-100 优秀
       80-90 好
       70-80 良
       60-70 及格
       60 以下 不及格

package com.study.demo.ifdemo;

import java.util.Scanner;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class IfDemo03 {

    public static void main(String[] args) {
        // 创建对象
        Scanner sc = new Scanner(System.in);
        // 接收输入的数字
        System.out.println("请输入学生考试成绩分数:");
        int score = sc.nextInt();
        // 应该考虑分数在0-100分,不能小于0和大于100
        if (score < 0 || score > 100) {
            System.out.println("输入的成绩是错误的");
        } else if (score >= 90 && score <= 100) {
            System.out.println("成绩属于优秀");
        } else if (score >= 80 && score < 90) {
            System.out.println("成绩属于好");
        } else if (score >= 70 && score < 80) {
            System.out.println("成绩属于良好");
        } else if (score >= 60 && score < 70) {
            System.out.println("成绩属于及格");
        }else{
            System.out.println("成绩不及格");
        }
    }
}

1.3.3 选择结构 switch

  • 格式

switch(表达式){

case 目标值1;

         语句体1;

         break;

case 目标值2;

         语句体2;

         break;

......

default:

         语句体n+1;

         break;

}

  • 格式解释
    • switch 表示这是 switch 语句
      • 表达式的取值:byte,short,int,char
      • JDK5 以后可以是枚举
      • JDK7 以后可以是 String
  • case 后面跟的是要和表达式进行比较的值
  • 语句体部分可以是一条或多条语句
  • break 表示中断,结束的意思,可以结束 switch 语句
  • default 语句表示所有情况都不匹配的时候,就执行该处的内容,和 if 语句的 else
    相似。
  • 执行流程
    • 首先计算出表达式的值
    • 其次,和 case 依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程
      中,遇到 break 就会结束。
    • 最后,如果所有的 case 都和表达式的值不匹配,就会执行 default 语句体部分,然
      后程序结束掉。
  • 流程图

例:根据键盘录入的数值 1、2、3...7 输出对应的星期一、星期二、星期三...星期日

package com.study.demo.switchdemo;

import java.util.Scanner;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class SwitchDemo {

    public static void main(String[] args) {
        // 创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 接收数据
        System.out.println("请输入一个数字(1-7):");
        int weekday = sc.nextInt();
        // switch 语句实现选择
        switch (weekday) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("你输入的数字有误");
                break;
        }
    }
}

注意:有可能触发多个 case 分支 。 如果在 case 分支语句的末尾没有 break 语句 , 那么就会接着执行下一个 case 分支语句,因为case具有穿透功能。这种情况相当危险,常常会引发错误。为此, 我们在程序中从不使用 switch 语句。

1.4 循环结构

1.4.1 概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称
为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为 false,
从而结束循环,否则循环将一直执行下去,形成死循环。

1.4.2 循环语句的组成

  •  循环变量初始化 (初始化表达式):
    一条或者多条语句,这些语句完成一些初始化操作。
  • 循环出口(布尔表达式):
    这是一个 boolean 表达式,这个表达式能决定是否执行循环体。
  •  循环逻辑内容(循环体):
    这个部分是循环体语句,也就是我们要多次做的事情。
  • 循环增量(步进表达式):
    这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条
    件中的变量,使得循环在合适的时候结束。

1.4.3 循环结构 for

  • 格式

for(初始化表达式①;布尔表达式②;步进表达式④){
                                        循环体③
             }

  • 执行流程
    • 执行顺序: ①②③④>②③④>②③④… ②不满足为止。
    • ①负责完成循环变量初始化
    • ②负责判断是否满足循环条件,不满足则跳出循环
    • ③具体执行的语句
    • ④循环后,循环条件所涉及变量的变化情况
  • 流程图

例:在控制台输出 10 次 HelloWorld

package com.study.demo.fordemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class ForDemo01 {

    public static void main(String[] args) {
        // 原始写法
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("-------------------------");
        // 用循环改进
        for (int x = 1; x <= 10; x++) {
            System.out.println("HelloWorld" + x);
        }
    }
}

例:求出 1-5 之间数据之和

package com.study.demo.fordemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class ForDemo02 {
    
    public static void main(String[] args) {
        // 1.定义一个初始化变量,记录累加求和,默认值为 0
        int sum = 0;
        // 2.使用 for 循环获取 1-5 之间的数据
        for (int i = 1; i <= 5; i++) {
            // 3.把每一次 for 循环获取到的数据累加起来
        /*
        * 第一次:sum = 0 + 1 = 1
        * 第二次:sum = 1 + 2 = 3
        * 第三次:sum = 3 + 3 = 6
        * 第四次:sum = 6 + 4 = 10
        * 第五次:sum = 10 + 5 = 15
        */
            //sum = sum + i;
            sum += i;
        }
        // 4.循环结束之后,打印累加结果
        System.out.println("sum:" + sum);
    }
}

例:控制台打印出所有的水仙花数

所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153 就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3

package com.study.demo.fordemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class ForDemo03 {
    
    public static void main(String[] args) {
        // 使用 for 循环获取所有的三位数
        for (int i = 100; i < 1000; i++) {
            // 拆分个位,十位,百位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 10 / 10 % 10;
            // 让获取到的个位,十位,百位的立方和相加和该数比较,如果相等就是水仙花数,在控制台输出
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) {
                System.out.println(i);
            }
        }
    }
}

1.4.4 循环结构 while

  • 格式

基本格式

             while(布尔表达式) {
                           循环体语句;
                      }

  • 扩展格式

初始化表达式①
             while(布尔表达式②){
                           循环体③
                       步进表达式④
                      }

  • 执行流程
    • 执行顺序: ①②③④>②③④>②③④… ②不满足为止。
    • ①负责完成循环变量初始化。
    • ②负责判断是否满足循环条件,不满足则跳出循环。
    • ③具体执行的语句。
    • ④循环后,循环变量的变化情况
  • 流程图

例:输出 10 次 HelloWorld

package com.study.demo.whiledemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class WhileDemo01 {

    public static void main(String[] args) {
        // 使用 for 循环打印 10 次 HelloWorld
        for (int i = 1; i <= 10; i++) {
            System.out.println("HelloWorld");
        }
        System.out.println("--------------------");
        // while 循环实现打印 10 次 HelloWorld
        int i = 1;
        while (i <= 10) {
            System.out.println("HelloWorld");
            i++;
        }
    }
}

例:求出1-100之间数据之和

package com.study.demo.whiledemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class WhileDemo02 {
    public static void main(String[] args) {
        // 回顾 for 循环 求 1-100 之和
        // 定义一个变量,记录累加求和
        int sum = 0;
        // 利用 for 循环获取 1-100 之间的数字
        for (int i = 1; i <= 100; i++) {
            //累加求和
            sum += i;
        }
        // 打印求和的变量
        System.out.println("1-100 的和是:" + sum);
        // 使用 while 循环实现
        // 定义一个变量,记录累加求和
        sum = 0;
        // 定义初始化表达式
        int i = 1;
        // 使用 while 循环让初始化表达式的值变化
        while (i <= 100) {
            // 累加求和
            sum += i;
            // 步进表达式改变变量的值
            i++;
        }
        // 打印求和的变量
        System.out.println("1-100 的和是:" + sum);
    }
}

1.4.5 循环结构 do..while

  • 格式

基本格式
              do {
                        循环体语句;
                    }while(布尔表达式);

  • 扩展格式

初始化表达式①
              do{
                      循环体③
                   步进表达式④
                  }while(布尔表达式②);

  • 执行流程
    • 执行顺序: ①③④>②③④>②③④… ②不满足为止。
    • ①负责完成循环变量初始化。
    • ②负责判断是否满足循环条件,不满足则跳出循环。
    • ③具体执行的语句
    • ④循环后,循环变量的变化情况
  • 流程图

例:输出10次HelloWorld

package com.study.demo.dowhiledemo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class Dowhiledemo {

    public static void main(String[] args) {
        // 输出 10 次 HelloWorld
        /*
          for(int x=1; x<=10; x++) {
          System.out.println("HelloWorld");
          }
        */
        // do...while 改写
        int x = 1;
        do {
            System.out.println("HelloWorld");
            x++;
        } while (x <= 10);
    }
}

三种循环的区别

  • 虽然可以完成同样的功能,但是还是有小区别:
    • do…while 循环至少会执行一次循环体。
    • for 循环和 while 循环只有在条件成立的时候才会去执行循环体。
  • for 循环语句和 while 循环语句的小区别:
    • 使用区别:控制条件语句所控制的那个变量,在 for 循环结束后,就不能再被访问到了,而 while 循环结束还可以继续使用,如果你想继续使用,就用 while,否则推荐使用 for。原因是 for 循环结束,该变量就从内存中消失,能够提高内存的使用效率。
  • 循环使用推荐 for -- while -- do..while

2. 跳转控制语句

2.1 概述

我想让循环在某一步的时候结束或者跳过某些数据不要这些数据,现在就做不了这件事
情。为了弥补这个缺陷,Java 就提供了 break,continue 来实现控制语句的中断和跳转。

  • break 中断
  • continue 继续

2.2 Break

  • break 的使用场景:

在选择结构 switch 语句中

在循环语句中

离开使用场景的存在是没有意义的

  • break 的作用:

跳出单层循环

package com.study.demo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class BreakDemo {

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // 需求:打印完两次 HelloWorld 之后结束循环
            if (i == 3) {
                break;
            }
            System.out.println("HelloWorld" + i);
        }
    }
}

2.3 Continue

  • continue 的使用场景:

在循环语句中

离开使用场景的存在是没有意义的

  • continue 的作用:

单层循环对比 break,然后总结两个的区别

       break 结束当前循环
                   continue 结束本次循环,继续下一次循环

package com.study.demo;

/**
 * @Auther: lds
 * @Date: 2018/10/19
 * @Description:
 */
public class ContinueDemo {

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // 需求:不打印第三次 HelloWorld
            if (i == 3) {
                continue;
            }
            System.out.println("HelloWorld" + i);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值