Java逻辑控制语句
在实际生活中,我们的生活不是一成不变的,很多时候需要我们去选择,大到人生的十字路口,小到今天晚上吃什么,选择无处不在。小的选择决定了我们一件小事的走向,大的选择可能会改变我们人生的轨迹。在我们程序开发过程中,我们的代码也是自上而下,自左而右的去执行。但是我们的程序代码也会遇到不同的情况,需要做出不同的选择,那么这些选择我们应该怎么去应对和选择呢?
下面我们来看一下我们的需求:
我们的社区要统计辖区内未成年人的姓名、年龄,看哪些未成年人应该适应哪个年龄段的教育情况!
一、程序的顺序执行
我们现在看看我们的需求,我们要收集未成年人姓名和年龄,并看到这些信息。
String name="张三";//定义变量name名字
System.out.println("我叫"+name);//输出我叫什么
int age=18;//定义变量age年龄
System.out.println("我今年"+age+"岁");//输出年龄
输出结果:
代码解析:
定义了变量之后,通过输出语句执行输出,并将输出结果打印在控制台。我们完美的完成了第一步。但是问题来了,我们这么做,只能有一个未成年人信息,那么我们怎么能主动收集信息呢?我们想到了前节课学到的Scanner类,提供键盘输入。
代码调整:
String name="";//定义变量name名字
System.out.println("请输入未成年人的姓名:");
name=new Scanner(System.in).next();
System.out.println("我叫"+name);//输出我叫什么
int age=0;//定义变量age年龄
System.out.println("请输入未成年人的年龄:");
age=new Scanner(System.in).nextInt();
System.out.println("我今年"+age+"岁");//输出年龄
输出结果:
那么接下来,我们来看看如何实现我们根据未成年人的年龄来区分适应的学习阶段吧!!!
二、程序的逻辑控制
我们继续分析我们的项目,社区要求根据未成年人的年龄区分教育学习阶段,根据我们的常识,未成年人3岁要接受幼儿教育,7岁接受小学教育,12岁接受初中教育,16岁接受高中教育。那么未成年人输入的年龄我们并不能控制,我们该怎么设计我们的项目呢?
根据我们的需求,我们来看看我们应该怎么做
我们面对这样的情况,我们怎么解决呢?我们来学习新的只是,Java逻辑控制语句。
代码结构:
if(判断条件) {
执行代码
}
if(age==3) {
System.out.println(name+","+age+"岁了,应该接受幼儿教育了!");
}
我们终于找到了办法,去检验来我们社区登记的未成年人的年龄是否符合幼儿教育,那么其他年级怎么办呢?我有个好办法!!!
if(age==3) {
System.out.println(name+","+age+"岁了,应该接受幼儿教育了!");
}
if(age==7) {
System.out.println(name+","+age+"岁了,应该接受小学教育了!");
}
if(age==12) {
System.out.println(name+","+age+"岁了,应该接受初中教育了!");
}
if(age==16) {
System.out.println(name+","+age+"岁了,应该接受高中教育了!");
}
好像我的问题解决了,真的值得庆祝!就在我兴奋之时,我的伙伴给了我一个致命的打击,所以我现在在考虑是修改我的代码,还是跟他断交!问题就是我们怎么区分来登记的是不是未成年人呢?我们先要解决的是这个问题!!!
2、if…else语句
根据我们的想法,是不是应该是这样的一个情况呢?
if(判断条件) {
执行代码
}else{
执行代码
}
那么我们的代码是不是也应该修改一下呢?
if(age==3) {
System.out.println(name+","+age+"岁了,应该接受幼儿教育了!");
}else {
System.out.println("您已成年,不符合教育阶段");
}
我严重的发现了个问题,要是这么修改,那么我的代码岂不是会变成这样!
if(age==3) {
System.out.println(name+","+age+"岁了,应该接受幼儿教育了!");
}else {
System.out.println("您已成年,不符合教育阶段");
}
if(age==7) {
System.out.println(name+","+age+"岁了,应该接受小学教育了!");
}
else {
System.out.println("您已成年,不符合教育阶段");
}
if(age==12) {
System.out.println(name+","+age+"岁了,应该接受初中教育了!");
}
else {
System.out.println("您已成年,不符合教育阶段");
}
if(age==16) {
System.out.println(name+","+age+"岁了,应该接受高中教育了!");
}
else {
System.out.println("您已成年,不符合教育阶段");
}
虽然问题得到了解决,但是我的代码变得非常臃肿,就像我日渐增大的肚腩,难道没有更好的办法吗?
3、if…else if…else语句
经过我艰苦卓绝的努力,牺牲了我本来不多的发际线,使出挠头的绝招,终于让我在逻辑语句中的终极形态上找到了解决办法,那么我是怎么解决的呢?
if(判断条件1) {
执行代码1
}else if(判断条件2) {
执行代码2
}else{
执行代码3
}
根据这个思路,我们来整理我们的代码
String name="";//定义变量name名字
System.out.println("请输入未成年人的姓名:");
name=new Scanner(System.in).next();
System.out.println("我叫"+name);//输出我叫什么
int age=0;//定义变量age年龄
System.out.println("请输入未成年人的年龄:");
age=new Scanner(System.in).nextInt();
System.out.println("我今年"+age+"岁");//输出年龄
if(age==3) {
System.out.println(name+","+age+"岁了,应该接受幼儿教育了!");
}else if(age==7) {
System.out.println(name+","+age+"岁了,应该接受小学教育了!");
}else if(age==12) {
System.out.println(name+","+age+"岁了,应该接受初中教育了!");
}else if(age==16) {
System.out.println(name+","+age+"岁了,应该接受高中教育了!");
}else {
System.out.println("您的年纪不符合教育阶段");
}
我们来看一下,输出的结果是不是我们想要的
总结:
- if语句适合但条件判断;if…else语句适用于互斥条件判断;if…else if…else语句适用于多条件互斥判断
- 并列的if语句,每个判断条件都要去判断;if…else if…else语句只要有一个条件满足,其他不会判断
- 在程序设计中,当出现每个条件都需要判断时,我们选择并列if语句;当出现只要一个结果时,选择if…else if…else语句
问题:
- 我们在判断的时候,是一个固定的值,那么我们需要判断一个范围怎么办?
- 既然是一个固定的值,那么还有其他方法进行判断吗?
4、switch…case语句
我们的需求是要求登记人的年龄达到一个固定的标准值时,生成不同的结果,那么我们除了if语句以外,还可以怎么实现呢?
代码结构:
switch(表达式){
case 常量表达式1:
语句1
break;
case 常量表达式2:
语句2
break;
case 常量表达式3:
语句3
break;
…
case 常量表达式n:
语句n
break;
default: 语句n+1
}
那么我们根据我们新掌握的只是,来实现我们的需求
String name="";//定义变量name名字
System.out.println("请输入未成年人的姓名:");
name=new Scanner(System.in).next();
System.out.println("我叫"+name);//输出我叫什么
int age=0;//定义变量age年龄
System.out.println("请输入未成年人的年龄:");
age=new Scanner(System.in).nextInt();
System.out.println("我今年"+age+"岁");//输出年龄
switch (age) {
case 3:
System.out.println(name+","+age+"岁了,应该接受幼儿教育了!");
break;
case 7:
System.out.println(name+","+age+"岁了,应该接受小学教育了!");
break;
case 12:
System.out.println(name+","+age+"岁了,应该接受初中教育了!");
break;
case 16:
System.out.println(name+","+age+"岁了,应该接受高中教育了!");
break;
default:
System.out.println("您的年纪不符合教育阶段");
break;
}
switch语句的注意事项:
- 用作判断的表达式必须是符合byte、short、int、char类型的表达式,而不能使用double、long、boolean,在JDK1.7以前也不能使用字符串,但是在JDK1.7以后可以使用字符串,但是不建议使用
- switch表达式依次和每个case子句中的常量值相比较。如果匹配成功,则执行case子句中常量值后的语句,直到break语句为止
- case子句中的常量值不能相同,否则会报错
- default子句可以省略
5、逻辑控制语句的关联和区别
- if可以用于判断数值,也可以判断区间,只要运算结果是boolean类型,都可以
进行判断;switch用于对固定的几个值,进行判断。判断的值的类型有限 - if的组合更灵活,可以依据不同的情况进行嵌套;switch结构清晰,但不够灵活
- if不需要通过流程控制关键字进行控制;switch必须以流程控关键字来控制
- if判断条件多元化,可以通过逻辑运算符来组合;switch只能判断常量