流程控制-顺序结构、分支结构


顺序结构

  • JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
  • 顺序结构是最简单的算法结构。
  • 语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。

分支结构(选择结构)

到达某个状态时,可能会有多种情况,每种情况都需要提前准备好,所以多条路的路口就是一个分支。代码写的多,程序运行的少。
分类:

  • if单选择结构
  • if双选择结构
  • if多选择结构
  • 嵌套的if结构
  • switch多选择结构

if单选择结构

格式:

if(布尔表达式){
  //如果布尔表达式为true将执行的语句
}

说明:

  • if后面跟着的小括号,里面必须是boolean类型的值;if语句后面的小括号中,只要是计算结果为boolean类型就合法
  • 语句体可以是任意操作

执行流程:

  • 计算布尔表达式的值,要么为true,要么为false
  • 如果计算结果为true,执行语句体
  • 如果计算结果为false,就不执行语句体
import java.util.Scanner;

public class IfDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入内容:");
        String str = scanner.nextLine();

        //equals:判断字符串是否相等
        if(str.equals("Hello")){
            System.out.println(str);
        }
        System.out.println("end");

        scanner.close();
    }
}

输出结果:

if双选择结构

格式:

if(布尔表达式){
	//如果布尔表达式为true将执行的语句(语句体1)
}else{
	//如果布尔表达式为false将执行的语句(语句体2)
}

说明:

  • 是否有某种情况,可以语句体1和语句体2都不执行?不可能,else就已经包含了if不满足的所有状态
  • 是否有某种情况,可以让语句体1和语句体2都执行?不可能,因为只要语句体1执行了,if语句就直接结束了
  • 只能执行其中的一句,并且一定会执行其中一句

执行流程:

  • 计算布尔表达式的值,要么是true,要么是false
  • 如果条件表达式的值为true,执行语句体1
  • 如果条件表达式的值为false,执行语句体2
import java.util.Scanner;

public class IfDemo {
    public static void main(String[] args) {
        //考试分数大于60分就是及格,小于60分就是不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score>60){
            System.out.println("合格");
        }else{
            System.out.println("不合格");
        }

        scanner.close();
    }
}

输出结果:

if多选择结构

格式:

if(布尔表达式1){
	//如果布尔表达式1的值为true执行代码(语句体1)
}else if(布尔表达式2){
	//如果布尔表达式2的值为true执行代码(语句体2)
}
	...
}else{
	//如果以上布尔表达式都不为true执行代码
}

执行流程:

  • 计算布尔表达式1,如果为true,就执行语句体1
  • 如果布尔表达式1为false,计算布尔表达式2,如果为true,就执行语句体2
  • 如果布尔表达式2为false,就计算布尔表达式3……
  • 如果布尔表达式1~布尔表达式n全部为false,那么就执行else里的语句体

说明:

  • 如果布尔表达式2计算结果为true,执行语句体2(布尔表达式1的条件不满足)
  • 只要一个语句体执行了,if语句就结束了
  • 如果没有else语句,可能一个语句体都不执行;如果有else语句就一定会执行其中的一句
  • else语句必须在最后
import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score == 100){
            System.out.println("恭喜满分");
        }else if (score < 100 && score >= 90){
            System.out.println("A级");
        }else if (score < 90 && score >= 80){
            System.out.println("B级");
        }else if (score < 80 && score >= 70){
            System.out.println("C级");
        }else if (score < 70 && score >= 60){
            System.out.println("D级");
        }else if (score < 60 && score >= 0){
            System.out.println("不及格");
        }else{
            System.out.println("成绩不合法");
        }

        scanner.close();
    }
}

switch多选择结构

格式:

switch(表达式){
	case value1:
		//语句体1
		break;//可选
	case value2:
		//语句体2
		break;//可选
	default://可选
		//语句
}

执行流程:

  • 计算表达式的值,分别和各个常量匹配
  • 如果和value1匹配,那么就执行语句体1,break,switch语句就结束了
  • 如果和value1不匹配,那么就判断是否和value2匹配,如果匹配就执行语句体2,break,switch语句就结束了
  • 以此类推,如果value1~valuen全都没有和表达式匹配的值,那么就执行default中的内容,switch语句结束

注意事项:

  • 表达式类型:byte short char int 枚举(jdk5开始) String(jdk7开始)
  • case后面只能跟常量,不能跟变量
  • 每个case的语句体后面一定要跟上一个break语句,否则就无法结束switch语句,并发生case穿透。如果多个情况是相同的逻辑执行,那么就可以使用case穿透。
  • default可以写也可以不写。如果不写,就可能一个语句都执行不到,建议把default语句加上
  • default语句可以写在任意位置,无论写在什么位置,都是最后去匹配,建议把default语句写在最后面
  • switch语句结束的条件:碰到了break语句;碰到了右大括号
public class SwitchDemo {
    public static void main(String[] args) {
        char grade = 'C';

        //case穿透    //switch匹配一个具体的值
        switch(grade){
            case 'A':
                System.out.println("优秀");break;
            case 'B':
                System.out.println("良好");break;
            case 'C':
                System.out.println("及格");
            case 'D':
                System.out.println("再接再厉");
            case 'E':
                System.out.println("挂科");
            default:
                System.out.println("未知等级");
        }
    }
}
public class SwitchDemo {
    public static void main(String[] args) {
        String name = "哈哈";
        //jdk7新特性,表达式结果可以是字符串
        switch(name){
            case "哈哈":
                System.out.println("哈哈");
                break;
            case "嘿嘿":
                System.out.println("嘿嘿");
                break;
            default:
                System.out.println("弄啥嘞!");
                break;
        }
    }
}

相关