Java基础 -- 第03章:选择结构[云图智联]
免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/
1. if选择结构
1.1 基本if选择结构
1.1.1 生活中,我们经常需要先作出判断再来决定是否作某件事情。比如:如果我的存款超过1万元我就出去旅游、如果今天的任务完成了晚上就不需要加班等等。在程序中,对于这种“需要先判断条件,条件满足时才能执行”的需求,就要用到if选择结构来解决。
1.1.2 基本语法:
if(布尔表达式){
//表达式结果为true时执行的代码块
}else{
//表达式结果为false时执行的代码块
}
1.1.3 实例:
public static void main(String args[]){
int x = 10;
if( x < 20 ){ //此表达式的运算结果为true
System.out.print("这是 if 语句"); //所以执行此行代码
}else{
System.out.print("这是 else 语句"); //不执行此行代码
}
}
1.1.4 逻辑运算符:
1.1.4.1 &&:与、并且:所有条件同时为真,结果为真;若有一个为假,结果为假。比如:
int m=10;
boolean bool=(m>0 && m<100); //此时bool值为true,当m值为200时,bool值为false
1.1.4.2 ||:或、或者:所有条件有一个为真,结果就为真;同时为假,结果为假。比如:
int x=95,y=80;
boolean bool=(x>=95 || y>=95); //此时bool值为true,当X值为94时,bool值为false
1.1.4.3 !:非、取反:条件为真,结果为假;条件为假,结果为真。比如:
int n=0;
boolean bool=!(n>0); //此时bool值为true,当n值为1时,bool值为false
1.1.5 注意:当if()中的条件判断语句比较复杂时,可以用()进行分层次、分级别的包裹处理。
1.2 多重if选择结构
1.2.1 一般用来解决需要判断的条件是连续的区间时;
1.2.2 基本语法及流程示意图:
if(布尔表达式1){
//布尔表达式1结果为true时执行的代码块1
}else if(布尔表达式2){
//布尔表达式2结果为true时时执行的代码块2
}else if(布尔表达式3){
//布尔表达式3结果为true时时执行的代码块3
}else{
//所有布尔表达式结果都为false时执行的代码块4
}
1.2.3 实例:
public static void main(String args[]){
int score = 70;
if( score >= 90 ){ //当score大于等于90时
System.out.print("Very Good!");
}else if( score >= 80 ){ //当score小于90,并且大于等于80时
System.out.print("不错!");
}else if( score >= 70 ){ //当score小于80,并且大于等于70时
System.out.print("还行!"); //执行此行代码
}else{ //当score小于70时
System.out.print("要加油哦!");
}
}
1.2.4 注意:
1.2.4.1 else是“否则”的意思,就是说通过这个“else”,已经将与它对应的if()中的布尔结果隐式的“取反”了。
1.2.4.2 else-if块可以有也可以没有,具体请根据需要而定;
1.2.4.3 else块可以没有,最多只能一个,且必须放在else-if块之后。
1.2.4.4 如果多个else-if块是连续的关系,则要按照从大到小,或从小到大的顺序依次排列,不能随意。
1.3 嵌套if选择结构
1.3.1 我们知道,在乘坐火车时:当旅客购买了火车票后才能进入安检区,当通过了安检后才能进入候车区,到了进站时间时才能进入站台...同理,在程序中也有很多需要我们多级、层层去判断的情况,这就需要用到嵌套if结构来解决。
1.3.2 基本语法:
if(布尔表达式1){
if(布尔表达式2){
//布尔表达式1和2都为true时执行的代码块
}else{
//布尔表达式1为true但布尔表达式2为false时执行的代码块
}
}else {
//布尔表达式1为false时执行的代码块
}
1.3.3 实例:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("您购买了火车票吗?");
String answer1=input.next();
if(answer1.equals("yes")) {
System.out.println("请进入安检区...");
System.out.println("安检合格了吗?");
String answer2=input.next();
if (answer2.equals("yes")) {
System.out.println("请进入候车区...");
System.out.println("到进站时间了吗?");
String answer3=input.next();
if (answer3.equals("yes")) {
System.out.println("请进入站台...");
} else {
System.out.println("请您耐心等候...");
}
} else {
System.out.println("安检不通过,不能进入候车区!");
}
}else {
System.out.println("请您先去购票!");
}
}
1.3.4 注意:
1.3.4.1 互相匹配的一对if和else块应该左对齐;
1.3.4.2 内层的if结构应该相对于外层的if结构有一定的缩进,以显示层次、包含关系;
1.3.4.3 if-esle结构之间可以根据需要进行多级嵌套,注意逻辑和格式的正确;
1.3.4.4 在动手编码之前,尤其是对一个问题无从下手时,可以先画出流程图来帮助理清解决思路。
1.4 习题:请通过编程实现:从控制台输入3个整数,然后将这3个数按照从小到大的顺序重新排序后再次输出。
1.4.1 思路:(1)先将输入的3个数分别存入3个变量中;(2)如何排序?这就好比3个人按身高排队,两两比较,个高的往后站;同理,这3个数字也需要两两比较,如果前面的大于后面的,就把它们的值互换即可。另外,为了保证比较的全面,3个数字一共需要比较3次。
1.4.2 部分参考代码及效果图:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int first=input.nextInt();
System.out.println("请输入第二个数字:");
int second=input.nextInt();
System.out.println("请输入第三个数字:");
int third=input.nextInt();
System.out.println("排序前:"+first+"\t"+second+"\t"+third);
if(first>second) { //如果第一个大于第二个
//交换
int empty;
empty=first;
first=second;
second=empty;
}
if(second>third) { //如果第二个大于第三个
//交换
int empty;
empty=second;
second=third;
third=empty;
}
if(first>second) { //如果第一个大于第二个
//交换
int empty;
empty=first;
first=second;
second=empty;
}
System.out.println("排序后:"+first+"\t"+second+"\t"+third);
}
2. switch选择结构
2.1 什么是switch选择结构
2.1.1 switch选择结构一般用于等值、独立条件的判断,比如判断一个人的国籍、电风扇的调速档位等等;
2.1.2 基本语法:
switch(表达式){
case 常量1:
//代码块1;
break;
case 常量2:
//代码块2;
break;
......
defalut:
//代码块n;
break;
}
2.1.3 说明:
2.1.3.1 执行过程:先计算并获取switch后的()中的表达式或变量的值,然后将这个值逐一与每个case后的常量进行比对,当两者相等时就执行这个case块中的代码;当遇到break时,就跳出整个switch结构。如果这个值与所有的case后的常量都不相等,则执行defalut块中的代码。
2.1.3.2 switch的原义为“开关/转换器”,其后的()里的值可以是整型变量(表达式),可以是字符变量(表达式);
2.1.3.3 case的原义为“情况/情形”,其后必须是一个整型或字符型的常量。case块可以有任意个,顺序可以改变,但每个case后的值必须各不相同、互斥。
2.1.3.4 defalut的原义为“默认”,当所有的case块都不满足时,就执行default块中的代码。default块与case块的顺序没有要求,但通常放在最后,且可以省略。
2.1.3.5 break的原义为“打断/终止”,即跳出当前结构。且break语句是可以省略的,但省略后,它后面的case就不再进行判断而是直接执行,直到再次遇到break才会跳出。有时会利用这一原理让多个case块执行同一个操作。
2.2 实例1:
2.2.1 需求说明:某超市举行幸运抽奖活动,一等奖可获得电动车一辆,二等奖可获得洗衣机一台,三等奖可获得电饭锅一台,其它都为幸运奖,可获得洗衣粉一袋。
2.2.2 分析:可获得什么奖品需要先判断获得了几等奖,并且各个名次之间没有连续关系,都是独立的数据,所以我们选用switch结构来解决这个问题; 2.2.3 参考代码:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的获奖名次:");
if (input.hasNextInt()) { //用户输入的是一个数字
int mingCi=input.nextInt();
switch (mingCi) {
case 1: //如果名次为1
System.out.println("恭喜你,获得电动车一辆!");
break;
case 2: //如果名次为2
System.out.println("恭喜你,获得洗衣机一台!");
break;
case 3: //如果名次为3
System.out.println("恭喜你,获得电饭锅一台!");
break;
default: //如果名次不是1 2 3,即默认的情况
System.out.println("恭喜你,获得幸运奖,洗衣粉一袋!");
break;
}
} else { //用户输入的不是数字
System.out.println("您输入的不是数字,请重新输入!");
}
}
2.3 实例2:
2.3.1 需求说明:为云小图制定学习计划,星期一、三、五学习编程,星期二、四、六学习英语,星期日休息。 2.3.2 分析:决定哪天应该干什么需要先判断今天是周几,并且没有连续关系,所以我们选用switch结构来解决这个问题;并且“星期一、三、五”这三种case执行的操作是一样的,“星期二、四、六”这三种case执行的操作是一样的,所以,我们只需酌情省略几个break,就可以让多个case块执行相同的操作; 2.3.3 参考代码:
public static void main(String[] args) {
System.out.println("今天是周几?");
Scanner input = new Scanner(System.in);
String week = input.next();
switch (week) {
case "一":
case "三":
case "五": // 如果是1/3/5,执行同一个操作
System.out.println("学习编程");
break;
case "二":
case "四":
case "六": // 如果是2/4/6,执行同一个操作
System.out.println("学习英语");
break;
case "日":
System.out.println("休息");
break;
}
}
2.4 switch结构和if结构的使用场景
2.4.1 switch结构的条件只能是等值的判断,并且只能是整型或字符型的等值判断。
2.4.1 多重if结构既可以用来进行连续区间的判断,也可以用于等值条件的判断。
2.5 习题
2.5.1 需求说明:编写一个程序,为一个给定的年份找出其对应的中国生肖。生肖每12年一个周期,每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、rooster、dog、pig。请根据以下举例总结出判断方法:2016年是猴年,因为:2016 % 12 == 0;2017年是鸡年,因为:2017 % 12 == 1 。
3.补充
3.1 比较两个字符串是否相等:equals()
String name="张三";
boolean isEqual=name.equals("李四");
System.out.println(isEqual); //false
3.2 分解获取4位数字中的百位数字:如int num=5678
3.2.1 方法1:先对100取商,得到56,再对10取余,得到6 ==> int bai=num/100%10;
3.2.2 方法2:先对1000取余,得到678,再对100取商,得到6 ==> int bai=num%1000/100;
3.3 三元运算:
3.3.1 语法:数据类型 变量 =(关系运算)?值1:值2;
3.3.2 说明:当关系运算的结果为true时,变量的值取冒号前的值1,否则取冒号后的值2;
3.3.3 举例:int max=(num1>num2)?num1:num2;
,翻译为人话就是:让max等于num1和num2中较大的值。
3.4 判断输入的是否是一个数字:
input(扫描仪对象).hasNextInt(),结果为一个布尔值。
4.常用单词
1. if:如果
2. else:否则
3. break:打断、终止
4. match:匹配
5. gender:性别
6. random:随机
7. switch:转换
8. case:情况、情形
9. exit:退出
10. defalut:默认
免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/
上一篇: 前端开发工程师前景怎么样?
下一篇: scrapy爬虫遇坑爬坑记录