Java学习-第五天
今日学习共3节课
学习笔记梳理:
第三章:流程控制语句
第 1 阶段:Java 基本语法
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
程序设计中规定的三种流程结构,即:
顺序结构
• 程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
• 根据条件,选择性地执行某段代码。
• 有 if…else 和 switch-case 两种分支语句。
循环结构
• 根据循环条件,重复性的执行某段代码。
• 有 for、while、do-while 三种循环语句(可理解为四种因为下面的foreach)
• 补充:JDK5.0 提供了 foreach 循环,方便的遍历集合、数组元素。(第 12 章集合中讲解)
- 顺序结构
顺序结构就是程序从上到下逐行地执行。表达式语句都是顺序执行的。并且上一行对某个变量的修改对下一行会产生影响
例如:
int z1 = 2;
System.out.println("今天是周 " + z1 + ",10 天以后是周" + (z1 + 3));
错误格式:
System.out.println("今天是周 " + z1 + ",10 天以后是周" + (z1 + 3));
int z1 = 2;
分支语句
2.1 if-else 条件判断结构
2.1.1 基本语法
结构 1:单分支条件判断:if
格式:if(条件表达式){
语句块;
}
说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量
执行流程:
- 首先判断条件表达式看其结果是 true 还是 false
- 如果是 true 就执行语句块
- 如果是 false 就不执行语句块
结构 2:双分支条件判断:if...else
格式:
if(条件表达式) {
语句块 1;
}else {
语句块 2;
}
执行流程:
- 首先判断条件表达式看其结果是 true 还是 false
- 如果是 true 就执行语句块 1
- 如果是 false 就执行语句块 2
结构 3:多分支条件判断:if...else if...else
格式:
if (条件表达式 1) {
语句块 1;
} else if (条件表达式 2) {
语句块 2;
}
...
}else if (条件表达式 n) {
语句块 n;
} else {
语句块 n+1;
}
说明:一旦条件表达式为 true,则进入执行相应的语句块。执行完对应的语句块之后,就跳出当前结构
执行流程:
- 首先判断关系表达式 1 看其结果是 true 还是 false
- 如果是 true 就执行语句块 1,然后结束当前多分支
- 如果是 false 就继续判断关系表达式 2 看其结果是 true 还是 false
- 如果是 true 就执行语句块 2,然后结束当前多分支
- 如果是 false 就继续判断关系表达式…看其结果是 true 还是 false
…
n. 如果没有任何关系表达式为 true,就执行语句块 n+1,然后结束当前多分支
2.1.2 应用举例
案例 1:成年人心率的正常范围是每分钟 60-100 次。体检时,如果心率不在此范围内,则提示需要做进一步的检查
int z1 = 88;
if(z1 < 60 || z1 > 100){
System.out.println("你需要做进一步的检查");
}
System.out.println("体检结束");
输出为:体检结束
案例 2:定义一个整数,判定是偶数还是奇数
int a = 10;
if(a % 2 == 0) {
System.out.println(a + "是偶数");
} else{
System.out.println(a + "是奇数");
}
输出为:10是偶数
案例 3:
岳小鹏参加 Java 考试,他和父亲岳不群达成承诺:
如果:
成绩为 100 分时,奖励一辆跑车;
成绩为(80,99]时,奖励一辆山地自行车;
当成绩为[60,80]时,奖励环球影城一日游;
其它时,胖揍一顿。
说明:默认成绩是在[0,100]范围内
int z1 = 88;
if (z1 == 100){
System.out.println("奖励一辆跑车");
}else if (z1 > 60 && z1 <=80){
System.out.println("奖励一辆山地自行车");
}else if (z1 > 80 && z1 < 99){
System.out.println("奖励环球影城玩一日游");
}else if (z1 < 60){
System.out.println("胖揍一顿");
}
88分输出为:奖励环球影城玩一日游
写法二:
int score = 88;
// 默认成绩范围为[0,100]
if(score == 100){
System.out.println("奖励一辆跑车");
}else if(score > 80){
System.out.println("奖励一辆山地自行车");
}else if(score >= 60){
System.out.println("奖励环球影城玩一日游");
}else{
System.out.println("胖揍一顿");
}
88分输出为:奖励环球影城玩一日游
当条件表达式之间是“互斥”关系时(即彼此没有交集),条件判断语句及执行语句间顺序无所谓
当条件表达式之间是“包含”关系时,“小上大下 / 子上父下”,否则范围小的条件表达式将不可能被执行
2.1.3 if...else 嵌套
在 if 的语句块中,或者是在 else 语句块中,又包含了另外一个条件判断(可以是单分支、双分支、多分支),就构成了嵌套结构
执行的特点: (1)如果是嵌套在 if 语句块中的,只有当外部的 if 条件满足,才会去判断内部的条件
(2)如果是嵌套在 else 语句块中的,只有当外部的 if条件不满足,进入 else 后,才会去判断内部的条件
案例 4:由键盘输入三个整数分别存入变量 num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出
int num1 = 23, num2 = 32, num3 = 12;
if (num1 >= num2) {
if (num3 >= num1)
System.out.println(num2 + "-" + num1 + "-" + num3);
else if (num3 <= num2)
System.out.println(num3 + "-" + num2 + "-" + num1);
else
System.out.println(num2 + "-" + num3 + "-" + num1);
} else { //num1 < num2
if (num3 >= num2) {
System.out.println(num1 + "-" + num2 + "-" + num3);
} else if (num3 <= num1) {
System.out.println(num3 + "-" + num1 + "-" + num2);
} else {
System.out.println(num1 + "-" + num3 + "-" + num2);
}
}
语句块只有一条执行语句时,一对{}可以省略,但建议保留
当 if-else 结构是“多选一”时,最后的 else 是可选的,根据需要可以省略
练习1:
int x = 4;
int y = 1;
if (x > 2) {
//因为y!=2,如果是 false 就执行语句块2 所以输出atguigu
if (y > 2)
System.out.println(x + y);
System.out.println("atguigu");
} else
System.out.println("x is " + x);
输出为:atguigu
练习2:
boolean b = true;
//如果写成 if(b=false)能编译通过吗?如果能,结果是?
//上面声明变量b = true,下面比较b是否等于false,所以输出b
if(b == false) //建议:if(!b)
System.out.println("a");
else if(b)//这里的b意思是b == true
System.out.println("b");
else if(!b)//这里的!b意思是b != true
System.out.println("c");
else
System.out.println("d");
//如果将b == false 改成 b = false 则输出c
if(b = false) //建议:if(!b)
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
输出为:b,c
练习 3:
定义两个整数,分别为 small 和 big,如果第一个整数 small 大于第二个整数
big,就交换。输出显示 small 和 big 变量的值
int z = 10;
int h = 9;
if (z > h) {
int o = z;
z = h;
h = o;
}
System.out.println("z=" + z + ",h=" + h);
输出为:z=9,h=10
练习 4:
小明参加期末 Java 考试,通过考试成绩,判断其 Java 等级,成绩范围
[0,100],90-100 优秀,80-89 好,70-79 良,60-69 及格,60 以下 不及格
int z1 = 59;
if (z1 == 100){
System.out.println("100牛逼");
} else if (z1 >= 90 && z1 <= 100) {
System.out.println("90以上");
} else if (z1 >= 80 && z1 <= 89) {
System.out.println("80以上");
} else if (z1 >= 70 && z1 <= 79) {
System.out.println("70以上");
} else if (z1 >= 60 && z1 <= 69) {
System.out.println("60以上");
} else if (z1 < 60) {
System.out.println("60以下你完了");
}
输出为:60以下你完了
另外一种写法(我没试过,直接从案例里复制来的):
if (score < 0 || score > 100) {
System.out.println("你的成绩是错误的");
} else if (score >= 90) {
System.out.println("你的成绩属于优秀");
} else if (score >= 80) {
System.out.println("你的成绩属于好");
} else if (score >= 70) {
System.out.println("你的成绩属于良");
} else if (score >= 60) {
System.out.println("你的成绩属于及格");
} else {
System.out.println("你的成绩属于不及格");
}
练习 5:
编写程序,声明 2 个 int 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!”
int z1 = 30;
int z2 = 64;
if (z1 + z2 >= 50) {
System.out.println("hello world!");
}
输出为:hello world!
练习 6:
编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小
于 20.0,打印两数之和。否则,打印两数的乘积
double d1 = 21.2,d2 = 12.3;
if(d1 > 10.0 && d2 < 20.0){
System.out.println("两数之和为:" + (d1 + d2));
}else{
System.out.println("两数乘积为:" + (d1 * d2));
}
输出为:两数之和为:33.5
练习 7:判断水的温度
如果大于 95℃,则打印“开水”;
如果大于 70℃且小于等于 95℃,则打印“热水”;
如果大于 40℃且小于等于 70℃,则打印“温水”;
如果小于等于 40℃,则打印“凉水”
int waterTemperature = 85;
if(waterTemperature > 95){
System.out.println("开水");
}else if(waterTemperature > 70 && waterTemperature <= 95){
System.out.println("热水");
}else if(waterTemperature > 40 && waterTemperature <= 70){
System.out.println("温水");
}else{
System.out.println("凉水");
}
输出为:热水
今日学习到此为止