一、Java的执行语句
分类:
1.1 顺序语句:方法里的代码从上往下执行
1.2 分支语句:条件成立就执行对应的功能
1.2.1 if
1.2.2 switch
1.3 循环语句:只要条件成立,就重复性的执行某个功能
1.3.1 for
1.3.2 while
1.3.3 do-while
1.4 特殊的流程控制语句
1.4.1 break
1.4.2 continue
1.4.3 return
1.4.4 label
二、if分支语句
- 简单的if分支
1.1 语法结构:
if(表达式){ ···代码块··· }
1.2 理解:表达式的结果必须是boolean类型
true–执行代码块
false–跳过if分支,执行if以外的 代码块
1.3 做实验
public class MyTest02{ public static void main(String[] args){ if(true){ System.out.println("···代码块····"); } } }
1.4 案例:
如果麻生希的java成绩大于98分,麻生希就能获得一辆法拉利做为奖励
代码如下:
import java.util.Scanner; public class MyTest03{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入麻生希的考试成绩:"); double score = scan.nextDouble(); if(score>98){ System.out.println("奖励麻生希一辆法拉利模型玩具"); } } }
小结:if{}要么进入,要么要不进入
2.复杂的if分支语句 案例一:
人类的健康值在20-25的数值内为健康(健康值的算法为:体重(Kg)/身高(米)的平方)
import java.util.Scanner; public class MyTest04{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); //输入体重值和身高值 System.out.println("请输入身高(kg):"); double height = scan.nextDouble(); System.out.println("请输入体重(m):"); double weight = scan.nextDouble(); //计算健康值 double health = weight/(height*height); //判断健康值范围 if(health>=20 && health<=25){ System.out.println("小护士说:\"您的身体健康,请继续保持\""); } } }
案例二:
麻生希Java成绩大于98分,而且音乐成绩大于80分,老师奖励他;或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他
import java.util.Scanner; public class MyTest05{ public static void main(String[] args){ //输入成绩 Scanner scan = new Scanner(System.in); System.out.println("请输入音乐成绩"); double musicScore = scan.nextDouble(); System.out.println("请输入Java成绩"); double javaScore = scan.nextDouble(); //判断成绩 if(javaScore>98 && musicScore>80 ||javaScore>=100 && musicScore>70){ System.out.println("老师奖励麻生希一辆法拉利模型玩具"); } } }
小结:if可以判断区间
if可以判断复杂的条件
3. if…else…
3.1 语法结构: if(表达式){ ...代码块... }else{ ...else代码块... }
3.2 理解:
表达式的结果必须是boolean
true–执行代码块
false–执行else代码块
3.3 做实验
public class MyTest06{ public static void main(String[] args){ if(false){ System.out.println("...代码块..."); }else{ System.out.println("...else代码块..."); } System.out.println("if分支以外的代码"); } }
多重if分支
4.1 语法结构:
if(表达式1){
…代码块1…
}else if(表达式2){
…代码块2…
}else if(表达式n){
…代码块n…
}else{
…else代码块…
}
4.2 理解:
从上往下判断表达式,哪个表达式先为true,就执行对应的代码块
如果都不为true,就执行else代码块
4.3 注意:
else代码块根据需求可写可不写,不影响语法规则
4.4 做实验
public class MyTest11{ public static void main(String[] args){ if(false){ System.out.println("...代码块1..."); }else if(false){ System.out.println("...代码块2..."); }else if(false){ System.out.println("...代码块3..."); }else{ System.out.println("...else代码块..."); } } }
4.5 案例
4.5.1 案例一
人类的健康值在
15-20的数值内为偏瘦
20-25的数值内为健康
25-30的数值内为偏胖
(健康值算法为:体重(Kg) / 身高 (米)的平方)
import java.util.Scanner; public class MyTest12{ public static void main(String[] args){ //输入身高和体重 Scanner scan = new Scanner(System.in); System.out.println("请输入体重(kg):"); double weight = scan.nextDouble(); System.out.println("请输入身高(m):"); double height = scan.nextDouble(); //计算健康值 double health = weight/(height*height); //判断健康值 if(health>=15&&health<20){ System.out.println("小护士说:\"偏廋,多喝啤酒,多吃垃圾食品,多熬夜\""); }else if(health>=20&&health<25){ System.out.println("小护士说:\"健康,请保持现有状态\""); }else if(health>=25&&health<=30){ System.out.println("小护士说:\"偏胖,多做运动!\""); }else{ System.out.println("小护士说:\"健康值异常,请到医院进行详细检查\""); } } }
4.5.2 案例二
通过键盘录入学生成绩
如果在90-100之间,则打印“A”,
否则如果在80-90之间,则打印“B”,
否则如果在70-80之间,则打印“C”
否则如果在60-70之间,则打印“D”
否则如果在 0-60之间,则打印“E”
否则打印“成绩异常”import java.util.Scanner; public class MyTest13{ public static void main(String[] args){ //录入学生成绩 Scanner scan = new Scanner(System.in); System.out.println("请输入学生成绩:"); double score = scan.nextDouble(); //判断成绩 if(score>=90&&score<=100){ System.out.println("A"); }else if(score>=80&&score<90){ System.out.println("B"); }else if(score>=70&&score<80){ System.out.println("C"); }else if(score>=60&&score<70){ System.out.println("D"); }else if(score>=0&&score<60){ System.out.println("E"); }else{ System.out.println("成绩异常"); } } }
小结:多选一的情况下使用多重if分支
嵌套if分支
案例:千锋举行运动会,百米赛跑跑入16秒内的学生有资格进决赛,
根据性别分别进入男子组和女子组。import java.util.Scanner; public class MyTest07{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入成绩:"); int score = scan.nextInt(); if(score>=0 && score<16){ System.out.println("请输入性别:"); String sex = scan.next(); if(sex.equals("男")){ System.out.println("恭喜你,进入男子组决赛"); }else if(sex.equals("女")){ System.out.println("恭喜你,进入女子组决赛"); }else{ System.out.println("性别异常"); } }else if(score>=16){ System.out.println("被淘汰了,重在参与"); }else{ System.out.println("成绩异常"); } } }
小结:
if允许无限层嵌套
项目中if最好嵌套不超过3曾,因为超过3层后代码可读性会很低
三、switch分支语句
switch分支的使用
1.1 语法结构:
switch(表达式){
case 值1://case和值1中间不要有空格!!否则会报错
…代码块1…
break;
case 值2:
…代码块2…
break;
case 值n:
…代码块n…
break;
default:
…default代码块…
break;
}1.2 理解:
表达式的结果分别与值1、值2、值n比较,
哪个相同就执行对应的代码块
如果都不相同就执行default代码块
default代码块根据需求可写可不写,不影响语法规则
break表示跳出整个switch分支
1.3 做实验
public class MyTest08{ public static void main(String[] args){ switch(500){ case 50: System.out.println("50"); break; case 100: System.out.println("100"); break; case 150: System.out.println("150"); break; default: System.out.println("default代码块"); break; } System.out.println("switch分支以外的代码..."); } }
1.4 案例:
小西满里惠参加计算机编程大赛
如果获得第一名,将参加千锋组织的1个月马尔代夫旅游
如果获得第二名,将奖励苹果Pro笔记本电脑一部
如果获得第三名,将奖励移动硬盘一个
否则,何老师晚上给小西满里惠通宵补课import java.util.Scanner; public class MyTest09{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入比赛名次:"); String str = scan.next(); switch(str){ case"第一名": System.out.println("参加千锋组织的1个月马尔代夫旅游"); break; case"第二名": System.out.println("奖励苹果Pro笔记本电脑一部"); break; case"第三名": System.out.println("奖励移动硬盘一个"); break; default: System.out.println("何老师晚上给小西满里惠通宵补课"); break; } } }
小结:switch只要是判断单个值是否相同
2. switch分支的深入2.1 面试题
2.1.1 case的值可以相同吗?
不允许
2.1.2 default可以省略吗?
可以
2.1.3 break可以省略吗?
可以
2.1.4 default的位置一定要在最后吗?
不一定,但是最好放在最后,因为考虑到代码可读性
2.1.5 表达式值的类型可以是什么?(面试经常问!!)
byte、short、int、char、字符串(JDK1.7)、枚举(JDK1.5)
2.1.6 switch底层判断数据的逻辑是什么?
switch底层是比较int值是否相同
byte–>int自动转型
short–>short自动转型
int–>int直接使用
char–>int获取字符的码值
字符串–>获取字符串的hash值(“abc” -> [‘a’,‘b’,‘c’] -> [97,98,99] -> 通过字符的码值+hash算法获取出的hash值)
枚举 --> int 获取枚举类里的对象编号(对象编号从0开始,对象编号是int类型)
2.2 练习题:输入年和月,输出当月的天数
分析:
1、3、5、7、8、10、12月 – 31天
4、6、9、11月 – 30天
2月 – 平年28天、闰年29天(年份被4整除并且年份不被100整除 或者 年份被400整数 就是闰年)方法一:
import java.util.Scanner; public class MyTest10{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入年份:"); int year = scan.nextInt(); System.out.println("请输入月份:"); int month = scan.nextInt(); >if(month==1||month==3||month==5||month==7||month==8||month==10||m>onth==12){ System.out.println("31天"); }else if( month==4||month==6||month==9||month==11){ System.out.println("31天"); }else if(month==2){ if(year%4==0 && year%100!=0||year%400==0){ System.out.println("29天"); }else{ System.out.println("28天"); } }else{ System.out.println("输入异常"); } } }