一、流程控制
流程就是做事情的先后顺序,比如郭德纲的一个相声“夜盗金陵”中,老爷子端来一个盆,先泡脚,然后再洗脸,最后洗口,咕噜咕噜咽下去,神清气爽~
- 程序中的流程,就是执行代码的先后顺序。有三种结构,顺序、分支、循环
1. 三大结构流程图
- 顺序结构:
- 分支结构:
- 循环结构:
2. 顺序结构Demo
一排的分隔线
二、分支语句
分支语句,即通过条件的判断,执行不同分支内的代码。
1. 判断语句if
if语句是一种分支语句。if语句有三种形式。
1.1 单if语句
单if语句: 如果…
if(布尔值){ // 如果布尔值为true就执行语句体;为false就跳过
语句体;
}
Demo:看jojo
对方看过JOJO嘛
boolean isNotLook = true // 没看过jojo嘛?回答true or false
if(isNotLook){
System.out.println("拖去看jojo");
}
System.out.println("我真是high到不行了!!!");
1.2 标准if语句
标准if语句: 如果…不然…
if(布尔值){ // 如果布尔值为true就执行语句体;为false就执行else
语句体1;
}else{
语句体2;
}
Demo:如果我是DJ
询问如果自己是DJ,对方爱你嘛
boolean isLove = true // 如果我是Dj,你会爱我嘛?回答true or false
if(布尔值){ // 如果布尔值为true就执行语句体;为false就跳过
System.out.println("是的,我爱你!妲己!");
}else{
System.out.println("给爷爬!");
}
标准if语句 & 三元运算符
三元运算符和标准if语句可以互换,下面用两种方式实现,取两者较大值。
- 三元运算符:
int a = 7;
int b = 13;
System.out.println(a > b ? a : b); // 13
- 标准if语句:
int a = 7;
int b = 13;
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
} // 13
1.3 多分支if语句
标准if语句: 如果…那不然…那不然…
if(布尔值){ // 如果布尔值为true就执行语句体;为false就判断下一else if
语句体1;
}else if(布尔值){ // 如果布尔值为true就执行语句体;为false就判断下一else if
语句体2;
}
...
else{ // 当所有条件都不满足时,才执行else
语句体n;
}
Demo:你是个好人
输入长相,对方对你说的话。
String face = "good" // 长相如何?good好,average中
if(face == "good"){
System.out.println("我们结婚吧");
}else if(face == "average"){
System.out.println("你是个好人");
}else{
System.out.println("gun!");
}
1.4 Demo:if语句综合
上面三个例子合在一起
2. 选择语句switch
switch是一种分支语句。
switch会将表达式结果计算出来,与每一个case的常量值进行比对,如果相同,就会执行相应语句。break可以跳出整个switch。
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
default的break可以省略,但最好不要省略
Demo:贪玩红约
输入贪玩红约的级数,会打印相应的话
System.out.println("欢迎来到贪玩红约, 请问你多少级?")
int gameLevel = 30; // 输入1~30整数
switch(gameLevel / 10) {
case 0:
System.out.println("你还在新手村呢");
break;
case 1:
System.out.println("初露锋芒");
break;
case 2:
System.out.println("像神一样");
break;
case 3:
System.out.println("战争之神");
break;
default:
System.out.println("你没有玩过贪玩红约,加入我们吧!");
break;
}
2.1 Switch注意事项
- 多个case后面的数值不能重复
- switch后面的小括号当中只能是 下列数据类型:
基本数据类型中的:byte/short/char/int
引用数据类型中的:String字符串/enum枚举 - switch格式比较灵活,每个case之间的先后顺序没关系,甚至default都可以写前面。
- 如果某一个case中没有break,会直到碰到break为止才停止switch。在这期间,会穿透执行其他的case中语句体。
2.2 Switch穿透
- 代码如下(部分)
int a = 2
switch(a) {
case 1:
System.out.println("执行语句体1");
break;
case 2:
System.out.println("执行语句体2");
case 3:
System.out.println("执行语句体3");
default:
System.out.println("执行语句体default");
break;
}
- 结果会是:
执行语句体2
执行语句体3
执行语句体default
可以看到,switch向下穿透执行了,直到碰到break才终止。
四、循环语句
循环结构,一般分为四个基本组成部分 :
- 初始化语句:在循环开始时执行,只做唯一一次
- 条件判断:如果成立,循环继续;否则跳出循环
- 循环体:重复要做的事
- 步进语句:每次循环之后都要进行的扫尾工作(这个是用以条件判断跳出循环的)
1. for循环
重复做次数确定的循环: for
for (初始化表达式; 布尔表达式; 步进表达式){
循环体;
}
Demo: 贪玩红约练级for
你现在是1级,要练到最高30级
2. while循环
for循环和while循环,没有本质区别。两个循环可以互相转换。
while (条件判断){
循环体;
步进语句;
}
Demo: 计算阶乘
给一个数,计算其阶乘
int num = 5; // 计算谁的阶乘?
int product = 1; // 存储结果
while (num > 1){
product *= num; // 循环体
num--; //步进语句(其实可以和循环体合并,但为了可读性,不建议合并)
}
3. do…while循环
do…while循环会先执行以下函数体,再进行条件判断
do {
循环体;
步进语句;
} while (条件判断);
Demo: 是我Dio哒
Dio打上30行木大,就会说“是我Dio哒!!!”
int count = 1;
do {
System.out.println("木大! 木大! 木大!");
count++;
} while (count <= 30);
System.out.println("是我Dio哒!!!");
五、其它
1. 练习Demo:计算100以内偶数和
尝试用三种循环写出以下练习:
2. 三种循环的区别
- for循环的变量在小括号当中定义,所以这些变量的作用域只在for循环内部。
- do…while循环至少会执行0次
一个软性建议:
- 循环次数确定的场合,使用for循环
- 否则使用while循环
- 一般不用do…while循环
3. 循环控制语句(关键字)
- break 结束循环
break可以跳出switch语句
break可以跳出循环 - continue 立即跳过当前次循环,立马回循环开头
4. 死循环
while (true){
循环体;
}
- 死循环不是一个错误,它可以正常编译
- 死循环后面如果有代码,会编译错误,因为永远轮不到它。
- 可以使用break跳出循环
Demo:没有4层的电梯
某一栋楼,有11层,你在一个电梯里,电梯有语音播报到了第几层。(第4层没有)