day03【 流程控制语句】
一. 顺序结构
- 代码从上到下依次执行
二. 选择结构
1. if语句(重点)
(1) if语句
格式
if (判断条件) {
语句体;
}
执行流程
- 看判断条件的结果:
- 如果为true, 就执行语句体
- 如果为false, 就不执行语句体
举例
// 定义变量, 用来记录是否有暴雨
boolean isHeavyRain = true;
// 是否是有暴雨的
if (isHeavyRain == true) {
// 推送信息
System.out.println("深圳气象台发布了:橙色暴雨预警");
}
(2) if-else语句
格式
if (判断条件) {
语句体1;
}else {
语句体2;
}
执行流程
- 看判断条件的结果:
- 如果为true, 就执行语句体1;
- 如果为false, 就执行语句体2;
举例
// 上网
// 创建变量, 用来代表年龄
int age = 15;
// 如果是成年人, 就可以上网
if (age >= 18) {
System.out.println("恭喜你, 可以上网啦!~");
}else {
// 如果是未成年, 就告诉你家长
System.out.println("恭喜你, 你爹知道了!~");
}
(3) if-else if语句
格式
if (判断条件1) {
语句体1;
}else if (判断条件2) {
语句体2;
}else if (判断条件3) {
语句体3;
}
...
else if (判断条件n) {
语句体n;
}else {
语句体n + 1;
}
执行流程
- 看判断条件1的结果
- 如果为true, 执行语句体1, 整个if语句结束
- 如果为false, 就继续向下判断下一个判断条件…
- 如果每一个if判断条件的结果都为false, 那么就执行最后的else中的语句体.
else: 可以不写, 但是建议写上, else可以对特殊情况进行处理
举例
- 需求: 定义变量, 用来代表成绩, 对成绩进行判断,按照等级输出结果
- 100 ~ 80: 优秀
- 79 ~ 60: 及格
- 59~ 30: 不及格
- 29 ~ 0: 请家长
// 定义变量, 用来代表成绩
int score = 20;
if (score >= 80 && score <= 100) {
System.out.println("优秀!");
}else if (score >= 60 && score < 80){
System.out.println("及格!");
}else if (score >= 30 && score < 60) {
System.out.println("不及格.");
}else if (score >= 0 && score < 30) {
System.out.println("请家长!!!");
}else {
System.out.println("成绩有误!~");
}
2. switch
格式
switch (常量/变量) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
case 值n:
语句体n;
break;
default:
语句体n + 1;
break;
}
执行流程
- 用switch后面小括号中的内容, 和下面的每一个case, 进行从上到下的匹配:
- 如果匹配成功(小括号中的内容和case后面的值相等), 就执行对应的语句体, switch语句结束.
- 如果没有匹配成功, 就继续匹配下一个case.
- 如果每一个case都没有匹配成功, 就执行最后的default中的语句体.
default可以不写, 但是建议写上.
举例
- 需求: 定义变量, 用来代表星期(1~7), 根据变量的值, 输出是对应的"星期一(二, 三 …)"
// 定义变量, 用来代表星期几
int week = 1;
switch (week) {
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;
}
注意事项
-
switch后面小括号中的内容可以是: byte, short, char, int, String(字符串), 枚举
-
case后面的内容, 必须是常量.
-
switch语句的结束条件, 1. 遇到了break, 2. 代码执行到右大括号
-
default语句可以写在switch中的任何位置, 但是一定是最后执行
case穿透
- 如果case匹配成功, 但是这个case没有break, 会继续向下执行, 下面的case都不会匹配, 直接执行语句体.
三. 循环结构
1. for循环(重点)
格式
// 初始化语句: 第一个执行, 只执行一次
// 判断条件: 结果是boolean类型
// 循环体后的操作语句: 循环体执行完之后, 再执行它
for (初始化语句; 判断条件; 循环体后的操作语句) {
循环体;
}
执行流程
- 先执行初始化语句, 只执行一次, 然后执行判断条件:
- 如果是true, 执行循环体, 然后执行循环体后的操作语句, 然后再执行判断条件 …
- 如果是false, for循环结束.
for循环学习的要求:
- 看到for循环, 要知道其中i的变化量
- 给定i的变化量, 写出对应的for循环
举例
- 需求: 通过for循环, 打印1 ~ 10
// 需求: 通过for循环, 打印1 ~ 10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
2. while循环(重点)
格式
while (判断条件) {
循环体;
}
执行流程
- 看判断条件的结果:
- 如果为true, 就执行循环体, 然后继续执行判断条件
- 如果为false, while循环结束
for和while的区别
- for循环中初始化语句定义的变量, 在for循环结束后就会消失.
- 如果明确循环次数使用for循环; 如果不明确循环次数使用while循环.
需求
- 计算1+2+3+…+100的和
// 计算1+2+3+...+100的和
// 定义变量, 用来当做总和
int sum = 0;
// 获取1~100之间的每一个整数
for (int i = 1; i <= 100; i++) {
// 将每一个数和计算出的和, 进行相加
sum = sum + i; // sum += i;
}
System.out.println(sum);
- 有一张足够大的纸(纸的厚度为0.01mm), 将它折成比珠穆朗玛峰(8844米)还高, 问要对折多少次.
/*
已知: 纸的厚度, 珠峰的高度, 定义计数器(0)
while (纸的厚度 < 珠峰的高度) {
循环体: 折纸
计数器自增
}
*/
// 有一张足够大的纸(纸的厚度为0.01mm),
// 将它折成比珠穆朗玛峰(8844米)还高, 问要对折多少次.
// 统一成整数
// 纸的厚度 (毫米 乘以 100)
int zhi = 1;
// 珠峰的高度
int zhu = 884400000;
// 定义计数器
int count = 0;
while (zhi < zhu) {
// 折纸
zhi = zhi * 2; // zhi *= 2;
// 计数器自增
count++;
}
System.out.println("共折纸次数为: " + count);
System.out.println("折纸后纸的厚度为: " + (zhi / 100000));
3. do-while循环(了解)
格式
do {
循环体;
}while(判断条件);
do-while循环,的第一次循环体不会进行判断.
4. 循环的跳转语句
- break: 可以用在switch中, 用来结束switch语句; 可以用在循环中, 用来结束循环.
- continue: 只能用在循环中, 用来结束本次循环, 继续进行下一次循环.
四. 扩展知识点
1. 死循环(无限循环)
- for循环中的无限循环
for (;;) {
循环体
}
- while循环的无限循环
while (true) {
循环体;
}
2. 循环嵌套(了解)
/*
打印4行5列的星星矩阵
*****
*****
*****
*****
*/
public class Demo03 {
public static void main(String[] args) {
// 外循环执行一次, 内循环执行一圈
for (int i = 1; i <= 4; i++) { // 外循环
// 打印一行的5个星星, 加上换行
for (int j = 1; j <= 5; j++) { // 内循环
System.out.print("*");
}
System.out.println(); // 换行
}
}
/*
此方法用于打印一行5个星星, 加上换行
*/
public static void print() {
// 打印一行的5个星星, 加上换行
for (int i = 1; i <= 5; i++) {
System.out.print("*");
}
System.out.println(); // 换行
}
}