选择结构(重点)
if选择结构
if单选择结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程中用if语句来表示。
语法
if(布尔表达式){
//如果布尔表达式为ture将执行的语句
}
//如果不为ture则跳过该语句执行之后的语句
如果不为ture则跳过该语句执行之后的语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rq8w6qBg-1632646779041)(D:\JAVA学习图片\Java流程控制\011.png)]
例子与解析
public class amy02 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入内容");
String s=scanner.nextLine();
//equals:判断字符串是否相等
/*如果语句System.out.println("请输入内容");
中的字符串与Hellow相等那么输出s否则输出END
*/
if (s.equals("Hellow")){
System.out.println(s);
}
System.out.println("END");
scanner.close();
}
}
if双选择结构
引入
现在有个需求,公司要收购一个软件,成功了,给人支付100W,失败了,则自己找人开发一个类似的软件。
这样的需求用if单选择结构是搞不定的,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构
语法
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Z5Uja64-1632646779043)(D:\JAVA学习图片\Java流程控制\012.png)]
例
考试分数大于60就是及格,小于60分就是不及格
public class amy03 {public static void main(String[] args){
//**考试分数大于60就是及格,小于60分就是不及格**
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你的成绩");
scanner.nextInt();
double score=scanner.nextInt();
if (score>60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
scanner.close();
}
}
if多选择结构
引入
由上述我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断,比如90-100就是A,80-90就是B…等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!
语法:
if(布尔表达式1){
//如果布尔表达式1的值为true执行此代码
}else if(布尔表达式2){
//如果布尔表达式2的值为true执行此代码
}else if(布尔表达式3){
//如果布尔表达式3的值为true执行此代码
}else{
//如果以上布尔表达式都不为true执行此代码
}
重点在else if
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2yU1Z04z-1632646779044)(D:\JAVA学习图片\Java流程控制\013.png)]
例
对考试分数大于60就是及格,小于60分就是不及格进行引入中的优化
import java.util.Scanner;
public class amy03 {
public static void main(String[] args) {
//**考试分数大于60就是及格,小于60分就是不及格**
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的成绩");
int score = scanner.nextInt();
if (score == 100) {
System.out.println("恭喜你你是满分:");
//注意不等式的表达用与运算符。
} else if (score < 100 && score >= 90) {
System.out.println("A级");
} else if (score < 90 && score >= 80) {
System.out.println("B级");
} else if (score < 80 && score >= 70) {
System.out.println("C级");
}else if (score < 70 && score >= 60) {
System.out.println("D级");
}else if (score < 60 && score >= 0){
System.out.println("成绩不及格");
}else {
System.out.println("成绩不合法请重新输入");
}
scanner.close();
}
}
注意点
- 注意连接不等式的是与运算符
- if语句中至多有一个else语句。且else语句出现在所以else if语句之后
- if语句中可以有若干个else if语句。它们必须在else 语句之前。
- 一旦其中一个else if语句检测为true。其他的else if以及else语句都得跳过执行。
嵌套的if结构
使用嵌套的if…else语句是合法的。也就是说你可以在另一个if或者else if中使用if或else if语句你可以像if语句那样嵌套else if…else。
语法:
if(布尔表达式 1){
如果布尔表达式1的值为true执行的代码
if(布尔表达式 2){
如果布尔表达式2的值为true执行的代码
}
}
用于实现二分法
switch多选择结构
-
多选择结构还有一个实现方式就是switch case语句
-
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
语法
switch(expression){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//你可以有任意数量的case语句
default://可选
//语句
}
注意事项
switch语句中的变量类型可以是
- byte,short,int或者char
- 从JavaSE7开始switch支持字符串string类型了
- 同时case标签必须为字符串常量或字面量
- case穿透现象:没有break时case在匹配成功后还会向下执行
例
public class amy04 { public static void main(String[] args) { char grade='C'; switch (grade){ //case穿透没有break时匹配成功后还会向下执行 //switch 匹配一个具体的值 case 'A': System.out.println("优秀"); break;//可选 case 'B': System.out.println("良好"); break; case 'C': System.out.println("及格"); break; case 'D': System.out.println("再接再厉"); break; case 'E': System.out.println("挂科"); break; default: System.out.println("未知等级"); } }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHuHSnWo-1632646779046)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20210908100915191.png)]
穿透现象
若将break去掉后并把定义的grade改为B
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUPQdL9Q-1632646779047)(D:\JAVA学习图片\Java流程控制\015.png)]
支持字符串类型的switch
从JavaSE7开始switch支持字符串string类型了
import java.util.Scanner;public class amy04 { public static void main(String[] args) { String name="鲁邦"; switch (name){ case"鲁邦": System.out.println("Amy"); break; case "蓓蕾卡": System.out.println("wife"); break; default: System.out.println("YYDS"); } }}
由运算符相关知识知道
字符的本质还是数字
原理
:反编译
Java…class(字节码文件)人是看不懂的…反编译为Java程序或其他(idea)即可
如何查看反编译
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6F9PDVSg-1632646779049)(D:\JAVA学习图片\Java流程控制\016.png)]
点击之后找到编译器输出路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4uXjVGM-1632646779049)(D:\JAVA学习图片\Java流程控制\017.png)]
CV该路径去资源管理器中搜索
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uAEQv1p2-1632646779050)(D:\JAVA学习图片\Java流程控制\018.png)]
点击production
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBL1zmHH-1632646779051)(D:\JAVA学习图片\Java流程控制\019.png)]
随便打开一个发现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQGXQ1JC-1632646779051)(D:\JAVA学习图片\Java流程控制\020.png)]
发现全是乱码
复制该文件(我是将base中的amy 复制到company中)
到其他文件夹中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfOvDsd0-1632646779052)(D:\JAVA学习图片\Java流程控制\021.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t1BZo2Vb-1632646779053)(D:\JAVA学习图片\Java流程控制\022.png)]
发现会报错
但是还有骚操作
右键点击该文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KDlry45-1632646779053)(D:\JAVA学习图片\Java流程控制\023.png)]
然后选择用idea打开即可
进行反编译
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zaGC3wWv-1632646779054)(D:\JAVA学习图片\Java流程控制\024.png)]
发现switch name变成了has code
最后还是找的是字符串
可以理解为
每个对象都有一个has code每个中文对应一个has code值