选择结构
今天我们讲讲Java中的选择结构,顾名思义,程序在运行过程中会面临很多的选择问题。这时就需要合适的语句来执行它。通常解决选择问题时有两种语句比较合适,它们是if语句和switch语句。
if 语句
if控制语句共有3种不同的形式,分别是单分支结构、双分支结构和多分支结构。
一、if语句的语法格式如下:
//if单分支语句的语法格式
if(表达式){
语句
}
if单分支语句执行步骤:
1.首先对表达式的结果进行判断
2.如果表达式的结果为真,则执行花括号里的语句
3.如果表达式的结果为假,则跳过花括号里的语句
二、if-else语句的语法格式如下:
//if-else语句的语法格式
if(表达式){
语句1
}else{
语句2
}
if-else语句执行步骤:
1.首先对表达式的结果进行判断
2.如果表达式的结果为真,则执行语句1
3.如果表达式的结果为假,则执行语句2
三、if-else if-else语句的语法结构如下:
//if-else if-else语句的语法格式
if(表达式1){
语句1
}else if(表达式2){
语句2
}else{
语句3
}
if-else语句执行步骤:
1.首先对表达式1的结构进行判断
2.如果表达式1的结果为真,则执行语句1
3.如果表达式1的结果为假,则对表达式2的结果进行判断
4.如果表达式2的结果为真,则执行语句2
5.如果表达式2的结果为假,则执行语句3
if 语句嵌套使用
下面用一道例题详细介绍if 嵌套语句的使用。
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。
设faHeight为其父身高,moHeight为其母身高,身高预测公式为:
男性成人时身高 = (faHeight + moHeight) * 0.54
女性成人时身高 = (faHeight * 0.923 + moHeight) / 2
此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。
利用给定公式和身高预测方法对你的身高进行预测。
要求父母的身高、是否爱好体育锻炼等参数从键盘输入。
提示:字符串的比较使用 .equals方法,如 String a=”爱好”; a.equals(“爱好”)的值为true
public class Height {
public static void main(String[] args) {
double faHeight,moHeight,myHeight;
String gender,bite,sports;
System.out.println("请分别输入我的性别、父亲身高、母亲身高、有无良好的饮食习惯、有无坚持运动:");
Scanner num=new Scanner(System.in);
gender=num.next();
faHeight=num.nextDouble();
moHeight=num.nextDouble();
bite=num.next();
sports=num.next();
if(gender.equals("男")){
if(bite.equals("有")&&sports.equals("无")){
myHeight=(faHeight+moHeight)*0.54*1.015;
System.out.println("我的身高为:"+ myHeight);
}else if (bite.equals("无")&&sports.equals("有")){
myHeight=(faHeight+moHeight)*0.54*1.02;
System.out.println("我的身高为:"+ myHeight);
}else if(bite.equals("有")&&sports.equals("有")){
myHeight=(faHeight+moHeight)*0.54*1.035;
System.out.println("我的身高为:"+ myHeight);
}else {
myHeight=(faHeight+moHeight)*0.54;
System.out.println("我的身高为:"+ myHeight);
}
}else {
if(bite.equals("有")&&sports.equals("无")){
myHeight=(faHeight*0.39+moHeight)/2*1.015;
System.out.println("我的身高为:"+ myHeight);
}else if (bite.equals("无")&&sports.equals("有")){
myHeight=(faHeight*0.39+moHeight)/2*1.02;
System.out.println("我的身高为:"+ myHeight);
}else if(bite.equals("有")&&sports.equals("有")){
myHeight=(faHeight*0.39+moHeight)/2*1.035;
System.out.println("我的身高为:"+ myHeight);
}else {
myHeight=(faHeight*0.39+moHeight)/2;
System.out.println("我的身高为:"+ myHeight);
}
}
}
}
题目解析:
根据题目所示,这里可以很好的使用if 嵌套语句。首先用一个if-else 语句判断性别,然后在if 语句里面再使用if-else if-else 语句判断有无良好的饮食习惯、有无坚持运动,运行结果如下:
注意:
(1)if 语句后面的括号内的条件表达式的值必须为布尔值,结果为true或者false;
(2)花括号里只有一条语句时可以省略花括号,但为了程序具有更高的可读性,一般不省略花括号;
(3)else 子句不能单独使用,它必须是if 语句的一部分;
(4)不论多分支if 语句中有多少个条件表达式,只会执行符合条件的一个,如果没有符合条件的,则执行else 子句中的语句;
if 语句练习
现在输入一个成绩,判断该成绩为优秀、良好、及格还是不及格。
// 多分支if语句的使用
public class Demo4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入成绩:");
int score=sc.nextInt();
if (score>=90){
System.out.println("优秀");
}else if (score>=80&&score<90) {
System.out.println("良好");
}else if (score>=60&&score<80){
System.out.println("及格");
}else{
System.out.println("不及格");
}
}
}
其运行结果如下:
switch 语句
除 if 语句以外,Java还提供了switch 语句,用于实现多分支选择结构。其语法格式如下:
//switch语句的语法格式
switch(表达式){
case 常量1:
语句;
break;
case 常量2:
语句;
break;
case 常量3:
语句;
break;
...
default:
语句;
break;
}
switch语句的执行步骤如下:
1.计算switch语句后表达式的值
2.将表达式的值从上到下依次与case后的常量值进行比较
3.如果相等就执行该常量后面的代码块,遇到break语句就结束
4.如果与任何一个case后的常量值都不匹配,就执行default中的代码块
switch语句应用
输入出生年份末尾两位数,判断年龄。仅仅以部分年份以作演示。
// 以出生年份末尾两位作为判断,95,96,97,98
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入出生年份后两位:");
byte year=sc.nextByte();
switch (year){
case 95:
System.out.println("25岁");
break;
case 96:
System.out.println("24岁");
break;
case 97:
System.out.println("23岁");
break;
case 98:
System.out.println("22岁");
break;
default:
System.out.println("other");
break;
}
}
输入出生年份末尾两位数year,将其依次与case 后面常量比较,例如输入97,程序比较后执行97后面的语句输出,然后遇到break结束。
运行结果如下:
注意
(1)如果case 后没有break 语句,程序将继续向下执行,直到遇到break 语句结束
(2)switch 后面的表达式是一个确切的值,用于跟case 后的常量作比较
(3)可以没有default 语句,且default 语句一般放在末尾
if 语句和switch 语句的区别
if 语句适用于区间范围判断,而switch 语句适用于等值选择判断。在某些情况下if 语句可以用switch 语句来完成,同样switch 语句也可以用if 语句来完成。在编码过程根据实际情况定选用if 语句还是switch语句,选择不同程序的运行过程、速度也会有所不同。