第03章:Java流程控制语句(随堂复习与企业真题)

一、随堂复习

1.1(了解)流程控制结构

  • 顺序结构
  • 分支结构
  1. if-else
  2. switch-case
  • 循环结构
  1. for
  2. while
  3. 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
  1. 指定的数据类型: byte \ short \ char \ int;枚举类(jdk5.0) \ String (jdk7.0)。
  2. 可以考虑的常量值有限且取值情况不多。
  • 特别之处: 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":
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值