第六章、条件语句
摘要
这是第六章,条件循环语句,也是所有语言当中必须要掌握的一些基本的循环算法,话不多说,直接上干货,如果你觉得可以请直接点赞加关注。越多更的越快!
提纲
- 6.1 多个if
- 6.2 多重if
- 6.3 switch选择结构
- 6.3.1 语法结构
- 6.3.2 例
- 6.3.3 注意事项(常见错误)
- 6.3.3.1 不写break的情况
- 6.3.3.2 case的常量问题
- 6.3.3.3 default的顺序问题
- 6.3.3.4 switch的条件问题
- 6.3.3.5 枚举类型举例(
- 6.4 多重if与switch选择结构的比较
- 6.5 嵌套if
- 6.6 判断键盘输入字符的合法性
- 6.7 作业
6.1 多个if
1.语法结构:多个if,执行的时候,三个条件都会进行判断,有几个条件满足则会执行几个代码块
if(条件){
//代码块1
}
if (条件2) {
//代码块2
}
if (条件3) {
//代码块3
}
2. 例:定义三个变量:String name = “张三”;String sex = “女”;int age = 100;分别判断并输出。
String name = “张三”;
String sex = “女”;
int age = 100;
if (“张三”.equals(name)) {
System.out.println(“姓名是:”+name+",好名字!");
}
if (“女”.equals(sex)) {
System.out.println(“性别是:”+sex+",美女好啊!");
}
if (age == 100) {
System.out.println(“年龄是:”+age+",就是年纪有点大!");
}
//输出结果是三句话都会输出
- 注意事项:每个if都会执行一遍
6.2 多重if
-
语法结构:
if (条件1) {
//代码块1
} else if (条件2) {
//代码块2
} else if(条件3) {
//代码块3
} else {
//代码块4
} -
举例:对学员的结业考试成绩评测:成绩>=90 :优秀,成绩>=80 :良好 ,成绩>=60 :中等,成绩<60:差。
int score = 70; //考试成绩
if ( score >= 90 ) {
System.out.println(“优秀”);
} else if (score >= 80 ) {
System.out.println(“良好”);
} else if (score >= 60 ) {
System.out.println(“中等”);
} else {
System.out.println(“差”);
}
//结果为中等 -
注意事项:
- 有if不一定要有else,但是有else必须要有if,else不能单独存在
- 如果有多个if,只有一个else时,这个else属于最近的那个if,即就近原则
- 多重if,只会执行一个if条件的代码块。即如果执行到某个if条件满足之后,后面if就不会再执行
6.3 switch选择结构
-
6.3.1 语法结构:
switch (表达式) {//这里的表达式是一个数值或者char类型字符,在JDK1.7(包括1.7)后可以使用字符串
case 常量 1://如果等于常量1 语句; break;//执行完之后跳出switch case 常量 2://如果等于常量2 语句; break; … default://如果没有找到匹配的值 语句; }
-
6.3.2 例:韩嫣参加计算机编程大赛。如果获得第一名,将参加麻省理工大学组织的1个月夏令营;如果获得第二名,将奖励惠普笔记本电脑一部;如果获得第三名,将奖励移动硬盘一个;否则,不给任何奖励。(该问题属于等值判断)
int mingCi = 1;
switch (mingCi) {
case 1:
System.out.println(“参加麻省理工大学组织的1个月夏令营”);
break;
case 2:
System.out.println(“奖励惠普笔记本电脑一部”);
break;
case 3:
System.out.println(“奖励移动硬盘一个”);
break;
default:
System.out.println("没有任何奖励 ");
}
//执行结果:参加麻省理工大学组织的1个月夏令营 -
6.3.3 注意事项(常见错误)
-
6.3.3.1 例1:不写break的情况。
int mingCi = 2;
switch (mingCi){
case 1:
System.out.println(“参加麻省理工大学组织的1个月夏令营”);
case 2:
System.out.println(“奖励惠普笔记本电脑一部”);
case 3:
System.out.println(“奖励移动硬盘一个”);
default:
System.out.println("没有任何奖励 ");
}
//执行结果
奖励惠普笔记本电脑一部
奖励移动硬盘一个
没有任何奖励
结论:每个case后不要忘记写break,否则会代码会继续往后执行所有的case代码,并且不会再进行判断(之前的代码会进行判断)。 -
6.3.3.2 例2:case的常量问题。
int mingCi = 1;
switch (mingCi){
case 1:
System.out.println(“参加麻省理工大学组织的1个月夏令营”);
case 2://代码错误,会报红线错误
System.out.println(“奖励惠普笔记本电脑一部”);
case 2:
System.out.println(“奖励移动硬盘一个”);
default:
System.out.println("没有任何奖励 ");
}
结论:case后面的常量必须各不相同 -
6.3.3.3 例3:default的顺序问题。
int mingCi = 4;
switch (mingCi){
default:
System.out.println("没有任何奖励 ");break;
case 1:
System.out.println(“参加麻省理工大学组织的1个月夏令营”);break;
case 2:
System.out.println(“奖励惠普笔记本电脑一部”);break;
case 3:
System.out.println(“奖励移动硬盘一个”);break;
}
//执行结果
没有任何奖励
结论:default位置没有顺序,可以省略,写了之后必须写上break。 -
6.3.3.4 例4:switch的条件问题。
String day = “星期一”;
switch (day){//代码错误
case “星期一”:
System.out.println("星期一:青菜 ");
break;
case “星期二”:
System.out.println("星期二:鱼 ");
break;
……
default:
}
结论:switch(条件)中的条件必须是整型或字符型或枚举类型的值,不能为字符串(JDK1.7之后可以(包括1.7)) -
6.3.3.5 枚举类型举例(JDK1.5之后):
//创建枚举类型
public enum Color{
RED, GREEN, BLANK, YELLOW;//大写
}
public static void main(String[] args) {
Color color = AAA.Color.RED;
switch (color){
default:
System.out.println(“空格”);break;
case RED:
System.out.println(“红色”);break;
case GREEN:
System.out.println(“绿色”);break;
case YELLOW:
System.out.println(“黄色”);break;
}
}6.4 多重if与switch选择结构的比较
-
- 相同点:都是用来处理多分支条件的结构。
- 不同点:
- switch选择结构:只能处理等值条件判断的情况,而且条件必须是整型变量或字符型变量。
- 多重if选择结构:没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况。
- 执行效率问题:5个选项(包括default)的情况下,switch和if/else if相同。低于5个选项if快,高于5给选项switch快!
- 使用条件:
- switch:常量表达式,如整形,字符型,静态字符串型。
- 多重if:如果比较的是一个区间,比如成绩等,就不能用switch解决。
6.5 嵌套if
-
语法结构:
if(条件1) {
//内层选择结构
if(条件2) {
代码块1
} else {
代码块2
}
} else {
代码块3
} -
例:与一个女生搭讪。
String sex = “女”;
int age = 18;
if (sex.equals(“女”)) {
if (age <= 18) {
System.out.println(“呵呵,我喜欢!”);
} else {
System.out.println(“滚一边玩去!”);
}
} else {
System.out.println(“淘汰!”);
}
6.6 判断键盘输入字符的合法性
-
菜单跳转的程序,需要输入数字编号,如果用户错误地输入了一个不允许的字符,例如“s”,程序会怎样呢?
Scanner input = new Scanner(System.in);
if (input.hasNextInt()) {
int num = input.nextInt();
switch (num) {
case 1:
//显示系统主菜单;break;
case 2:
System.out.println(“谢谢您的使用!”);break;
default:
System.out.println(“输入错误。”);break;
}
} else {
System.out.println(“请输入正确的数字!”);
}
结论:hasNextInt()方法判断输入的字符是否为int类型的数据。同理还有input.hasNextDouble(),input.hasNextLong()。
6.7 作业
- 输入赵本山的考试成绩,显示所获奖励,成绩==100分,爸爸给他买辆车,成绩>=90分,妈妈给他买MP4,90分>成绩>=60分,妈妈给他买本参考书,成绩<60分,什么都不买。
- 我想买车,买什么车决定于我在银行有多少存款,如果我的存款超过500万,我就买凯迪拉克,否则,如果我的存款超过100万,我就买帕萨特,否则,如果我的存款超过50万,我就买依兰特,否则,如果我的存款超过10万,我就买奥托,否则,我买捷安特。
- 一个运输公司规定,每公里运费为20元。如果运输公里数小于100公里的不打折,大于等于100公里并小于500公里的打9折,大于等于500公里的打8折。现要求输入一个公里数,计算费用。
- 张三为他的手机设定了自动拨号,按1:拨爸爸的号,按2:拨妈妈的号,按3:拨爷爷的号,按4:拨奶奶的号。(switch)
- 猴子去买桃,如果买3个以下,老板就不送桃,如果买3个到5个就再送一个桃,如果买5个以上就送2个桃,现在要求输入猴子的买桃数,最后输出到底买到了几个桃。
- 输入一个数字,如果这个数字是1,那么输出星期一,如果这个数字是2,那么就输出星期二,如果这个数字是3,那么就输出星期三。。。。。。如果是其他就输出输入错误!(switch)。
- 定义一个char型的变量,如果值是’a’,输出“拨打的是移动”;如果值是’b’,输出“拨打的是联通”;如果值是’c’,输出“拨打的是网通”;其他的是“拨打错误”。
- 输入一个整数,如果这个整数等于0输出“生成了一只白猪”,如果输入的整数等于1输出“生成了一只黑猪”,如果输入的是2输出“生成了一只红猪”,如果是其它的数就输出“生成了一只变形猪”。
- 输入一个整数,如果这个整数是小于0数输出小于0,如果大于等于0并且小于等于100就输出“整数>=0 and 整数<=100”。如果这个整数大于100就输出“整数>100”。
- 到商场去购买商品,首先购买了一台电视机,请输入电视机的价格。然后又购买了一个冰箱,请输入冰箱的价格。最后到前台交钱。如果总价格小于100元就不打折,如果总价格大于等于100–1000元就打9折,如果总价格大于等于1000元就打8折,如果总价格大于5000元就打7折。输出最后需要多少元。
- 输入你的性别(1代表男,2代表女,3代表中性,其他代表不是人类)。
- 写一个程序,根据下面给出的约束条件来计算学员的等级。输入一个整数表示学生的成绩,放在marks变量了 ,根据下面的等级分配,输出学生的等级,if marks>75-----A级,if 60 <=marks <= 75-------B级,if 45 <= marks <60 -------C级,if 35<=marks < 45-------D级,if marks <35 ------E级。
- 输入一个整数,如果等于0,把这个整数加2的结果输出;如果等于1,把这个整数加3的结果输出;如果等于2,把这个整数加4的结果输出;如果是其他的数就直接输出这个整数。
- 现在有一个银行保险柜,有两道密码。想拿到里面的钱必须两次输入的密码都要正确。如果第一道密码都不正确,那直接把你拦在外面;如果第一道密码输入正确,才能有权输入第二道密码。只有当第二道密码也输入正确,才能拿到钱!(两道密码自己设)(嵌套if)
- 找女朋友,先问“你是女的吗?”当她是的时候,再问“你有多大啊?”。
- 输入三个整数,如果这三个整数都相等,那么输出“这三个数相等”。否则再判断这三个数之和是否大于1000,如果大于1000输出“这三个数之和大于1000”否则输出“这三个数之和不大于1000”。
- 普通顾客购物满100元打9折;会员购物打8折;会员购物满200元打7.5折。实现思路:1、外层判断是否是会员2、内层判断是否达到相应打折要求。
- 输入两个小数,先将他们的整数部分拿出求和,如果大于10,就拿出他们的小数部分的求和,如果他们小数部分的和大于1.0,就输出“这两个数的小数部分大于1.0”,否则就说“这两个数的小数部分小于1.0”。如果他们整数部分求和不大于10,就拿出他们的小数部分的求差,如果他们小数部分的差大于0.0就输出“这两个数的小数部分的差大于0.0”,否则就说“这两个数的小数部分的差小于0.0”。
19.使用switch实现分级菜单(效果如下):
请输入消费金额:
250
是否参加优惠换购活动:
1:满50,加2元换购百事可乐饮料一瓶
2:满100,加3元换购500ml可乐一瓶
3:满100,加10元换购5公斤面粉
4:满200,加10元换购1个苏泊尔炒菜锅
5:满200,加20元换购欧莱雅爽肤水一瓶
0:不换购
请选择:
2
本次消费总金额:253.0
成功换购:500ml可乐一瓶