• 程序控制结构


    程序控制结构

    程序流程控制介绍

    在程序中,程序运行的流程控制决定程序是如何执行的,主要有三大流程控制语句:
    (1) 顺序控制
    (2) 分支控制
    (3) 循环控制

    顺序控制

    从上到下。

    分支控制if-else

    分支控制 if-else 介绍:
    让程序有选择的的执行,分支控制有三种
    (1)单分支 if
    (2)双分支 if-else
    (3)多分支 if-else if -…-else

    单分支

    基本语法

    if(表达式){执行代码块;}
    
    • 1

    说明:当条件表达式为ture时,就会执行 {} 的代码。如果为false ,就不执行。特别说明,如果中只有一条语句,则可不用。

    案例:编写一个程序,可以输入人的年龄,如果该同志的年龄大于等于 18 岁, 则输出 “你年龄大于 18,要对自己的行为负责,送入监狱”。
    import java.util.Scanner;
    public class Case7 {
    	public static void main(String[] args) {
    		// 应该定义一个 Scanner 对象
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入年龄:");
    		// 把年龄保存到一个变量 int age
    		int age = myScanner.nextInt();
    		// 使用 if 判断,输出对应信息
    		if (age >= 18) {
    			System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    双分支

    基本语法

    if(条件表达式){执行语句1;}
    else{执行语句2;}
    
    
    • 1
    • 2
    • 3

    说明:当条件表达式成立,即执行代码块1,否则执行代码块2。

    案例:编写一个程序,可以输入人的年龄,如果该同志的年龄大于等于 18 岁, 则输出 “你年龄已满 18,要对自己的行为负责,送入监狱”。否则,输出"你的年龄不大这次放过你了"。
    import java.util.Scanner;
    
    public class Case8 {
    	public static void main(String[] args) {
    		// 应该定义一个 Scanner 对象
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入年龄:");
    		// 把年龄保存到一个变量 int age
    		int age = myScanner.nextInt();
    		// 使用 if-else 判断,输出对应信息
    		if (age >= 18) {
    			System.out.println("你年龄已满 18,要对自己的行为负责,送入监狱");
    		} else {// 双分支
    			System.out.println("你的年龄不大这次放过你了");
    		}
    		System.out.println("程序继续...");
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    单分支和双分支练习题

    1.编写程序,键盘输入2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。
    import java.util.Scanner;
    
    public class Case9 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入第一个数字的大小:");
    		double d1 = myScanner.nextDouble();
    		System.out.println("请输入第二个数字的大小:");
    		double d2 = myScanner.nextDouble();
    
    		if (d1 > 10.0 && d2 < 20.0) {
    			double sum = d1 + d2;
    			System.out.println("d1 + d2 = " + sum);
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    2.定义两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息。
    import java.util.Scanner;
    public class Case10 {
    	public static void main(String[] args) {
    		// 键盘输入两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息
    		Scanner myScanner = new Scanner(System.in);
    		int a = myScanner.nextInt();
    		int b = myScanner.nextInt();
    		int sum = a + b;
    		if (sum % 3 == 0 && sum % 5 == 0) {
    			System.out.println("sum=" + sum + ",能被 3  整除且能被 5 整除");
    		} else {
    			System.out.println("sum=" + sum + ",不能被 3  整除或者不能被 5 整除");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ==输入 20 30 ==
    在这里插入图片描述
    输入 12 11
    在这里插入图片描述

    判断一个年份是否是闰年,闰年的条件是符合下面二者之一:(1)年份能被 4 整除,但不能被 100 整除;(2)能被 400整除。
    import java.util.Scanner;
    public class Case1 {
    	// 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
    	// (1)年份能被 4 整除,但不能被 100 整除;(2)能被 400整除。
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		int year = myScanner.nextInt();
    		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
    			System.out.println(year + "是闰年");
    		} else {
    			System.out.println(year + "不是闰年");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2022
    在这里插入图片描述
    2020
    在这里插入图片描述

    多分支

    基本语法

    if(表达式){执行语块1;}
    else if(表达式){执行语块2;}
    ......
    else{执行语块n;}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    特别说明:
    (1)多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有。
    (2)如果有else ,如果所有的条件表达式都不成立,则默认执行else代码块。

    案例:输入保国同志的芝麻信用分:

    如果:

    1. 信用分为 100 分时,输出 信用极好;
    2. 信用分为(80,99)时,输出 信用优秀;
    3. 信用分为(60,80)时,输出 信用一般;
    4. 其它情况 ,输出 信用不及格
    5. 请从键盘输入保国的芝麻信用分,并加以判断。
    import java.util.*;
    
    public class Case2 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		double score = myScanner.nextDouble();
    		if (score == 100) {
    			System.out.println("信用极好");
    		} else if (score > 80 && score <= 99) {
    			System.out.println("信用优秀");
    		} else if (score > 60 && score <= 80) {
    			System.out.println("信用一般");
    		} else {
    			System.out.println("信用不及格");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    考虑不周,如果输入的数字小于0或者大于100就会出现问题
    优化后,方法一:

    import java.util.*;
    
    public class Case2 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		double score = myScanner.nextDouble();
    		if (score == 100) {
    			System.out.println("信用极好");
    		} else if (score > 80 && score <= 99) {
    			System.out.println("信用优秀");
    		} else if (score > 60 && score <= 80) {
    			System.out.println("信用一般");
    		} else if(score > 0 && score <= 60){
    			System.out.println("信用不及格");
    		} else {
    			System.out.println("请输入0到100的整数!");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    优化后,方法二(嵌套)

    import java.util.*;
    
    public class Case2 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		double score = myScanner.nextDouble();
    		if (score >= 1 && score <= 100) {
    			if (score == 100) {
    				System.out.println("信用极好");
    			} else if (score > 80 && score <= 99) {
    				System.out.println("信用优秀");
    			} else if (score > 60 && score <= 80) {
    				System.out.println("信用一般");
    			} else {
    				System.out.println("信用不及格");
    			}
    		} else {
    			System.out.println("请输入0到100的整数!");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    嵌套分支

    基本介绍:在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。不要超过 3 层 (可读性不好)。

    基本语法

    if(条件){
        if(条件){
        ......;
        else{...}
        }
    else{...}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    案例:参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。
    import java.util.Scanner;
    
    public class Case3 {
    	// 参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。
    	// 并且根据性别提示进入男子组或女子组。
    	// 输入成绩和性别,进行判断和输出信息。
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入该歌手的成绩:");
    		double score = myScanner.nextDouble();
    		if (score > 8.0) {
    			System.out.println("请输入性别:");
    			char gender = myScanner.next().charAt(0);//如果输入“男生” charAt(0)获取字符串的第一个字符,即 男
    			if (gender == '男') {
    				System.out.println("进入男子组");
    			} else if (gender == '女') {
    				System.out.println("进入女子组");
    			} else {
    				System.out.println("你的性别有误,不能参加决赛~");
    			}
    		} else {
    			System.out.println("你已经被淘汰了");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    练习:出票系统:根据淡旺季的月份和年龄,打印票价

    4到10月旺季:
    成人(18-60):60
    儿童(<18):半价
    老人(>60):1/3
    淡季:
    成人:40
    其他:20
    思路分析:(1)淡旺季 if - else (2)在旺季中,可以使用多分支处理三种情况(3)在淡季情况,使用双分支处理。

    import java.util.Scanner;
    
    public class Case4 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入月份和年龄:");
    		int month = myScanner.nextInt();
    		int age = myScanner.nextInt();
    		if (month >= 4 && month <= 10) {
    			if (age < 18) {
    				System.out.println("票价为30元");
    			}
    			if (age >= 18 && age <= 60) {
    				System.out.println("票价为60元");
    			} else {
    				System.out.println("票价为20元");
    			}
    		} else {
    			if (age >= 18 && age <= 60) {
    				System.out.println("票价为40元");
    			} else {
    				System.out.println("票价为20元");
    			}
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    switch 分支结构

    基本语法

    switch(表达式){//表达式必须是一个对应的值
    case 常量1 : 语句块1;break;
    ......
    case 常量n : 语句块n;break;
    default : 语句块;break;//常量1到n都没有匹配到就执行这条语句
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    案例:请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g

    a 表示星期一,b 表示星期二 …

    import java.util.Scanner;
    
    public class Case5 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入字母(a 到 g):");
    		char ch = myScanner.next().charAt(0);
    		switch (ch) {
    		case 'a':
    			System.out.println("今天星期一");
    			break;
    		case 'b':
    			System.out.println("今天星期二");
    			break;
    		case 'c':
    			System.out.println("今天星期三");
    			break;
    		case 'd':
    			System.out.println("今天星期四");
    			break;
    		case 'e':
    			System.out.println("今天星期五");
    			break;
    		case 'f':
    			System.out.println("今天星期六");
    			break;
    		case 'g':
    			System.out.println("今天星期天");
    			break;
    		default:
    			System.out.println("请输入字母(a 到 g)!");
    			break;
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    输入a
    在这里插入图片描述
    输入h
    在这里插入图片描述

    switch 注意事项和细节讨论

    1. 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int。
    2. switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举].,String)。

    练习:1.使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 “other”。
    import java.util.Scanner;
    
    public class Case6 {
    	public static void main(String[] args) {
    		// 使用 switch 把小写类型的 char 型转为大写(键盘输入)。
    		// 只转换 a, b, c, d, e. 其它的输出 "other"。
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入小写字母:");
    		char ch = myScanner.next().charAt(0);
    		// A 对应值为65,a 对应值为97
    		switch (ch) {
    		case 'a':
    			System.out.println("A");
    			break;
    		case 'b':
    			System.out.println("B");
    			break;
    		case 'c':
    			System.out.println("C");
    			break;
    		case 'd':
    			System.out.println("D");
    			break;
    		case 'e':
    			System.out.println("E");
    			break;
    		default:
    			System.out.println("other");
    			break;
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    输入a
    在这里插入图片描述

    输入z
    在这里插入图片描述

    练习:2.对学生成绩大于 60 分的,输出"合格"。低于 60 分的,输出"不合格"。(注:输入的成绩不能大于 100)

    if-else语句

    import java.util.Scanner;
    
    public class Case7 {
    	// 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,
    	// 输出"不合格"。(注:输入的成绩不能大于 100)
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		int score = myScanner.nextInt();
    		if (score >= 0 && score <= 100) {
    			if (score < 60) {
    				System.out.println("不合格");
    			} else {
    				System.out.println("合格");
    			}
    		} else {
    			System.out.println("请输入100以内的自然数!");
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输入50
    在这里插入图片描述
    输入80
    在这里插入图片描述
    输入120
    在这里插入图片描述
    switch语句

    import java.util.Scanner;
    
    public class Case7 {
    	// 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,
    	// 输出"不合格"。(注:输入的成绩不能大于 100)
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		int score = myScanner.nextInt();
    		if (score >= 0 && score <= 100) {
    			switch ((int) (score / 60)) {
    			case 0:
    				System.out.println("不合格");
    				break;
    			case 1:
    				System.out.println("合格");
    				break;
    			// default :
    			// System.out.println("输入有误");
    			}
    		} else {
    			System.out.println("输入的成绩在 0-100!");
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    练习:3.根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 [使用穿透 ]
    import java.util.Scanner;
    
    public class Case8 {
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		System.out.println("请输入1~12:");
    		int month = myScanner.nextInt();
    		switch (month) {
    		case 3:
    		case 4:
    		case 5:System.out.println("春季");break;
    		case 6:
    		case 7:
    		case 8:System.out.println("夏季");break;
    		case 9:
    		case 10:
    		case 11:System.out.println("秋季");break;
    		case 12:
    		case 1:
    		case 2:System.out.println("冬季");break;
    		default:System.out.println("请输入1~12!");
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述

    switch 和 if 的比较

    (1)如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。两个语句都可以使用,建议使用 swtich 语句。
    (2)其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广。

    循环和c语言一样(省略)

    打印九九乘法口诀表

    import java.util.Scanner;
    
    public class Case10 {
    	// 编写一个 main 方法
    	public static void main(String[] args) {
    		// 打印出九九乘法表
    		int i, j;
    		for (i = 1; i <= 9; i++) {// i 表示前一个数
    			for (j = 1; j <= i; j++) {// j 表示后一个数
    				int sum = i * j;
    				System.out.print(" " + i + "*" + j + "=" + sum +"\t");
    				if(i == j){
    					System.out.print("\n");//当换行条件成立时,进行换行打印
    				}
    			}
    		}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

  • 相关阅读:
    Python 大麦抢票脚本
    【网络安全带你练爬虫-100练】第20练:数据处理-并写入到指定文档位置
    前端技术搭建五子棋游戏(内含源码)
    mysql巧妙化解递归查询树形数据 | 纯sql
    Docker基本操作和相关命令
    基于istio实现单集群地域故障转移
    循环神经网络时间序列预测
    MYSQL逻辑架构与存储引擎
    C#语言基础速成Day07
    遗传算法极限学习机GA-ELM回归预测及其MATLAB代码实现
  • 原文地址:https://blog.csdn.net/qq_53661628/article/details/127923195