一、随堂复习
1.1(了解)流程控制结构
- if-else
- switch-case
- for
- while
- do-while
1.2分支结构之1:if-else
- 在程序中,凡是遇到了需要使用分支结构的地方,都可以考虑使用if-else。
- if-else嵌套的练习多关注
基本语法:
分支结构1:if-else条件判断结构
1.格式
格式1:
if(条件表达式){
语句块;
}
格式2:
if(条件表达式){
语句块1;
}else{
语句块2;
}
格式3:"多选一"
if(条件表达式1){
语句块1;
}else if (条件表达式2){
语句块2;
}...
}else if (条件表达式n){
语句块n;
}else{
语句块n+1;
}
class IfElseTest{
public static void main(String[] args) {
/*
案例1:成年人心率的正常范围是每分钟60-100次。体检时,
如果心率不在此范围内,则提示需要做进一步的体检。
*/
int heartBeats = 61;
//错误写法
//if (60 <= heartbeats <= 100)
//因为int型和boolean型不能做比较
if (heartBeats < 60 || heartBeats > 100){
System.out.println("您需要做进一步的检查");
}else{
System.out.println("您的心率正常");
}
System.out.println("体检结束");
//**********************************
/*
案例2:定义一个整数,判断是偶数还是奇数
*/
int num1 = 13;
if (num1 % 2 == 0)
{
System.out.println(num1 + "是偶数");
}else{
System.out.println(num1 + "是奇数");
}
}
}
案例:
练习1:
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆跑车;
成绩为(80,99]时,奖励一辆山地自行车;
当成绩为[60,80]时,奖励环影城一日游;
其他时,胖揍一顿。
说明:默认成绩是在[0,100]范围内
结论:
1.如果多个条件表达式之间没有交集(理解是互斥关系),则哪个条件表达式声明在上面,哪个声明在下面都可以。
如果多个条件表达式之间是包含关系,则需要将范围小的条件表达式声明在范围大的条件表达式的上面。
否则,范围小的条件表达式不可能被执行。
class IfElseTest1{
public static void main(String[] args){
int score = 61;
/*
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("奖励胖揍一顿");
}
*/
//*****************************
if (score == 100)
{
System.out.println("奖励一辆跑车");
}else if(score > 80){
System.out.println("奖励一辆山地自行车");
}else if(score >= 60){
System.out.println("奖励环影城一日游");
}else{
System.out.println("奖励胖揍一顿");
}
//特别的,不用else也可以
if (score == 100)
{
System.out.println("奖励一辆跑车");
}else if(score > 80){
System.out.println("奖励一辆山地自行车");
}else if(score >= 60){
System.out.println("奖励环影城一日游");
}
/*else{
System.out.println("奖励胖揍一顿");
}
*/
}
}
练习2:
测试if-else的嵌套使用
案例:
由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
扩展:你能实现从大到小顺序的排序吗?
1.从开发经验上讲,没有写过超过三层的嵌套if-else结构。
2.如果if-else中的执行语句块中只有一行执行语句,则此执行语句所在的一对{}可以省略。但是,不建议省略。注:看练习1。
class IfElseTest2{
public static void main(String[] args){
int num1 = 23;
int num2 = 43;
int num3 = 39;
//int num1 =23, int num2 = 43, int num3 = 39;
//两种定义方式
if (num1 > num2){
if (num3 >= num1){
System.out.println(num2 + "," + num1 + "," + num3);
System.out.println("扩展");
System.out.println(num3 + "," + num1 + "," + num1);
}else if (num3 <= num2){
System.out.println(num3 + "," + num2 + "," + num1);
System.out.println("扩展");
System.out.println(num1 + "," + num2 + "," + num2);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
System.out.println("扩展");
System.out.println(num2 + "," + num3 + "," + num1);
}
}else{
if (num3 >= num2){
System.out.println(num1 + "," + num2 + "," + num3);
System.out.println("扩展");
System.out.println(num3 + "," + num2 + "," + num1);
}else if (num3 <= num1){
System.out.println(num3 + "," + num1 + "," + num2);
System.out.println("扩展");
System.out.println(num2 + "," + num1 + "," + num3);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
System.out.println("扩展");
System.out.println(num2 + "," + num3 + "," + num1);
}
}
//练习1:对下列代码,若有输出,指出输出结果。
int x = 4, y = 1;
if (x > 2){
if (y > 2)
System.out.println(x + y);
System.out.println("我爱学习");//输出结果为:我爱学习,因为如果if-else中的执行语句块中只有一行执行语句,则此执行语句所在的一对{}可以省略。
}else
System.out.println("x is " + x);
//练习2:
boolean b = true;
//如果写成if(b = false)能编译通过吗?如果能,结果是?
if (b == false) //建议写成if (!b)
{
System.out.println("b");
}else if (b){
System.out.println("a");
}else if (!b){
System.out.println("c");
}else{
System.out.println("d");
}
//输出结果为:a
/*
如果写成if(b = false)能编译通过
输出结果为:c
*/
//练习3:定义两个整数,分别为small和big,如果第一个整数small大于第二个整数big,就交换。输出显示small和big变量的值。
int small = 10;
int big = 9;
if (small > big){
System.out.println("small = " + small + ",big = " + big);
System.out.println("交换后");
int temp;
temp = big;
big = small;
small = temp;
System.out.println("small = " + small + ",big = " + big);
}else{
System.out.println("small = " + small + ",big = " + big);
}
/*
练习4:小明参加期末Java考试,通过考试成绩,判断其Java等级,成绩范围[0,100]
90 - 100 优秀
80 - 89 好
70 - 79 良
60 - 69 及格
60以下 不及格
*/
//写法一:把区间定死
System.out.println("小明的期末Java成绩是:[0-100]");
int score = 89;
if (score > 100 || score < 0){
System.out.println("你的Java成绩是错误的");
}else if (score >= 90 && score <= 100){
System.out.println("你的Java成绩属于优秀");
}else if (score >= 80 && score <= 89){
System.out.println("你的Java成绩属于好");
}else if (score >= 70 && score <= 79){
System.out.println("你的Java成绩属于良");
}else if (score >= 60 && score <= 69){
System.out.println("你的Java成绩属于及格");
}else{
System.out.println("你的Java成绩属于不及格");
}
//写法二:小范围放最上面
System.out.println("小明的期末Java成绩是:[0-100]");
int score1 = 89;
if (score1 > 100 || score1 < 0){
System.out.println("你的Java成绩是错误的");
}else if (score1 >= 90){
System.out.println("你的Java成绩属于优秀");
}else if (score1 >= 80){
System.out.println("你的Java成绩属于好");
}else if (score1 >= 70){
System.out.println("你的Java成绩属于良");
}else if (score1 >= 60){
System.out.println("你的Java成绩属于及格");
}else{
System.out.println("你的Java成绩属于不及格");
}
/*
练习5:编写程序,声明2个int型变量并赋值。判断两数之和,如果大于等于50,打印"hello world!"
*/
int num4 = 23, num5 = 43;
int temp = num4 + num5;
if (temp >= 50){
System.out.println("hello world!");
}
/*
练习6:编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。否则,打印两数的乘积。
*/
double d1 = 13.4, d2 = 12.3;
if (d1 > 10.0 && d2 < 20.0){
System.out.println("两数之和为:" + (d1 + d2));
}else{
System.out.println("两数之积为:" + (d1 * d2));
}
/*
练习7:编写程序:
如果大于95℃,则打印“开水”
如果大于75℃,小于95℃,则打印“热水”
如果大于40℃,小于75℃,则打印“温水”
如果小于等于40℃,则打印“凉水”
*/
int waterTemper = 74;
if (waterTemper > 100 || waterTemper < 0){
System.out.println("水温不对");
}else if (waterTemper > 95){
System.out.println("此时水为开水");
}else if (waterTemper > 75){
System.out.println("此时水为热水");
}else if (waterTemper > 40){
System.out.println("此时水为温水");
}else{
System.out.println("此时水为凉水");
}
}
}
1.3分支结构之2:switch-case
- 在特殊的场景下,分支结构可以考虑使用switch-case
- 指定的数据类型: byte \ short \ char \ int;枚举类(jdk5.0) \ String (jdk7.0)。
- 可以考虑的常量值有限且取值情况不多。
- 特别之处: case穿透。(无break的地方)
- 在能使用switch-case的情况下,推荐使用switch-case,因为比if-else效率稍高
基本语法:
1.语法格式
switch(表达式){
case 常量1:
//执行语句1:
//beark;
case 常量2:
//执行语句2:
//break;
...
default:
//执行语句n:
//break;
2.执行过程:
根据表达式中的值,依次匹配case语句。一旦与某一个case中的常量相等,那么就执行此case中的执行语句。
执行完此执行语句之后,
情况1:遇到break,则执行break后,跳出当前的switch-case结构
情况2:没有遇到break,则继续执行其后的case中的执行语句。 ---> case 穿透
...
直到遇到break或者执行完所有的case及default中的语句,退出当前的switch-case结构
3.说明:
①swith中的表达式只能是特定的数据类型。如下:byte \ short \ char \ int \ 枚举(JDK5.0新增) \String(JDK7.0新增)
②case后都是跟的常量,使用表达式与这些常量做相等的判断,不能进行范围的判断。
③开发中,使用switch-case时,通常case匹配的情况都有限。
④break:可以使用在switch-case中。一旦执行此break关键字,就跳出当前的switch-case结构;
⑤default:类似于if-else中的else结构。
default是可选的,而且位置是灵活的。
4.switch-case 与 if-else之间的转换
①开发中凡是可以使用switch-case结构的场景,都可以改写为if-else。反之,不成立
②开发中,如果一个具体问题既可以使用switch-case,又可以使用if-else的时候,推荐使用switch-case。
为什么?switch-case相较于if-else效率较高。
③细节对比:
if-else语句优势
if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。
switch语句的条件是一个常量值(byte \ short \ char \ int \ 枚举 \ String ),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄。
switch语句优势
当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为效率稍高。当条件是区间范围的判断时,只能使用if语句。
使用switch可以利用穿透性,同时执行对个分支,而if...else没有穿透性。
}
class SwitchCaseTest{
public static void main(String[] args) {
int num1 = 1;
switch (num1)
{
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
default:
System.out.println("other");
break;
}
//另例
String season = "summer";
switch (season)
{
case "spring":
System.out.println("春天");
break;
case "summer":
System.out.println("夏天");
break;
case "autumn":
System.out.println("秋天");
break;
case "winner":