程序控制结构

程序控制结构

程序流程控制介绍

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

顺序控制

从上到下。

分支控制if-else

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

单分支

基本语法

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

说明:当条件表达式为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,要对自己的行为负责,送入监狱");
		}
	}
}

在这里插入图片描述

双分支

基本语法

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

说明:当条件表达式成立,即执行代码块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 个 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);
		}
	}
}

在这里插入图片描述

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 整除");
		}
	}
}

==输入 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 + "不是闰年");
		}
	}
}

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

多分支

基本语法

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

特别说明:
(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("信用不及格");
		}
	}
}

在这里插入图片描述
考虑不周,如果输入的数字小于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的整数!");
		}
	}
}

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

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的整数!");
		}
	}
}

在这里插入图片描述

嵌套分支

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

基本语法

if(条件){
    if(条件){
    ......;
    else{...}
    }
else{...}
}

案例:参加歌手比赛,如果初赛成绩大于 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("你已经被淘汰了");
		}
	}
}

在这里插入图片描述

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

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元");
			}
		}
	}
}

在这里插入图片描述

switch 分支结构

基本语法

switch(表达式){//表达式必须是一个对应的值
case 常量1 : 语句块1;break;
......
case 常量n : 语句块n;break;
default : 语句块;break;//常量1到n都没有匹配到就执行这条语句
}
案例:请编写一个程序,该程序可以接收一个字符,比如: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;
		}
	}
}

输入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;
		}
	}
}

输入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以内的自然数!");
		}
	}
}

输入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!");
		}
	}
}

在这里插入图片描述

练习: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!");
		}
	}
}

在这里插入图片描述

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");//当换行条件成立时,进行换行打印
				}
			}
		}
	}
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值