Java流程控制-分支语句
Java的流程控制语句是用来控制程序执行流程的语句,它们决定了程序中各语句的执行顺序。通过流程控制语句,可以实现对程序执行路径的精确控制,使程序可以根据不同的条件执行不同的代码块,或者重复执行某些操作。Java中的分支语句分为:
1.顺序控制语句:
这是最基本的结构,代码按照它们在源文件中的顺序从上往下执行。
2.分支语句:
if 分支
-
语法:
if(表达式){ ...代码快…… }
-
注意:表达式结果必须是boolean类型
true – --进入if分支
false ----跳过分支,执型外面的语句
案例:
//案例一:如果成绩大于60就输出合格
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:")
double score = sc.nextInt();
if(score>60){
System.out.println("您的成绩合格")
}
System.out.println("查询完毕")
小结:条件成立进入if分支
不成立,不进入if分支
// 案例一: 人类的健康值在20-25的数值内为健康
(健康值算法为:体重(Kg) / 身高(米)的平方)
//输入体重和身高
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>=20 && health<=25){
System.out.println("小护士说:\"健康,请保持现有状态\"");
}
//小结:if可以判断区间
//案例三: 如果小明的语文成绩大于90并且数学成绩大于85,
他爸爸会给他买玩具,
或者数学100分,语文大于80分也会买玩具奖励
Scanner sc = new Scanner(System.in);
System.out.println("请输入语文成绩:");
double chiScore = sc.nextDouble();
System.out.println("请输入数学成绩:");
double mathScore = sc.nextDouble();
//判断
if((chiScore>90 && mathScore>85)||(chiScore>80 && mathScore == 100)){
System.out.println("爸爸给他买玩具~");
}
//小结: if可以判断复杂的条件
if……else 分支
-
语法:
if(表达式){ ……代码块…… }else{ ……else代码块 }
-
注意:表达式结果必须是boolean类型
true -------->执行代码块
false -------->执行else代码块
案例:
//案例:如果小明Java考试成绩大于98分,老师就奖励他玩具车,否则老师就罚他抄写试卷
Scanner scan = new Scanner(System.in);
System.out.println("请输入考试成绩:");
double score = scan.nextDouble();
if(score > 98){
System.out.println("奖励小明玩具车一辆");
}else{
System.out.println("小明,抄写试卷一遍");
}
小结:二选一的情况下使用if...else...
多重if分支语句
-
语法:
if(表达式){ ……代码块1 }else if{ ……代码块2…… }else if{ ……代码块3…… }else{ else代码块…… }
-
注意:从上往下依次判断,哪个条件成立执行哪个代码块,
全部不成立则执行else代码块
else{}语句按照需求可写可不写,不影响语法规范
案例:
//案例一:人类的健康值在 15-20的数值内为偏瘦 20-25的数值内为健康 25-30的数值内为偏胖 (健康值算法为:体重(Kg) / 身高(米)的平方) //输入体重和身高 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("健康值异常,请去医院详细检查"); }
//案例二:通过键盘录入学生成绩 如果在90-100之间,则打印“A”, 否则如果在80-90之间,则打印“B”, 否则如果在70-80之间,则打印“C” 否则如果在60-70之间,则打印“D” 否则如果在 0-60之间,则打印“E” 否则打印“成绩异常” 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 嵌套
- 规则:if 语句中嵌套着if语句
案例
//案例:学校举办运动会,跑进16秒的成绩有资格进入决赛,然后再根据性别分组男子组和女子组
Scanner sc = new Scanner(System.in);
System.out.println("请输入比赛成绩:");
double score = sc.nextDouble();
//判断
if(score > 0 && score <16){
//进决赛
System.out.println("请输入性别:");
String sex = sc.next();
if(sex.equals("男")){
System.out.println("进入男子组决赛!");
}else(sex.equals("女")){
System.out.println("进入女子组决赛!");
}else{
System.out.println("性别异常!");
}
}else if(score > 16){
//淘汰
System.out.println("成绩异常!");
}else{
System.out.println("成绩异常!");
}
switch 分支语句的使用
switch分支主要是做值匹配分支
-
语法:
switch(表达式){ case 值1 : 代码块1…… break; case 值2 : 代码块2…… break; case 值n : 代码块n…… break; default : ……default代码块…… break; }
-
理解:
-
表达式的值分别于值1,值2,值n进行匹配
哪个值相匹配就执行对应的代码块
如果都不匹配就执行default代码块
-
default语句可根据需求写,可写可不写,不影响语法规则
-
break 表示跳出当前switch分支语句
案例:
/** 案例:小西参加计算机编程大赛 如果获得第一名,将参加1个月马尔代夫旅游 如果获得第二名,将奖励苹果Pro笔记本电脑一部 如果获得第三名,将奖励移动硬盘一个 否则,小西没有任何奖励 */ 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 分支的注意事项
注意:
case 后面的值不可以重复
- default 语句可以省略
3. break 语句可以省略,但是可能会造成switch渗透,如果多个值的执行是一样的可以用来简化代码
4. default 语句的位置可以随意,switch分支最后去找default。建议就放在最后
5. 表达式类型:byte,short,int ,char ,String(jdk1.7),枚举(jdk1.5)
switch分支底层判断逻辑:
switch底层是比较int类型的值是否相等
- byte--------->int 自动转型
- short ------->int 自动转型
- int ----------> int 直接使用
- char--------->int 获取字符的ascll码
- String ------>int 获取字符串的hashCode
- 枚举 -------->int 获取枚举类中对象的编号(从0开始,int类型)