逻辑语句和逻辑运算符
凡事都有顺序,java中的语句执行顺序是从上至下,而选择无处不在,在代码里面遇到需要选择执行的时,就需要使用逻辑语句控制执行。
一个简单的例子,根据学生成绩判断所处区间
graph LR
a1(开始) --> a2[学生成绩]
a2 --小于60--> a4[不及格]
a2 --60至80--> a5[良好]
a2 --大于80--> a6[优秀]
a4 --> a7(输出)
a5 --> a7
a6 --> a7
这种问题就需要使用逻辑控制语句进行判断执行
逻辑判断
学习语句之前,我们需要知道在java中的逻辑运算符,编写逻辑表达式,才能判断结果是true还是false
| 逻辑运算符 | 名称 | 用法 | 说明 |
|---|---|---|---|
| & | 逻辑与 | a&b | a和b都是true结果才为true,否则false |
| | | 逻辑或 | a|b | a或者b其中一个为true即为true |
| ! | 逻辑非 | !a | a为true结果是false,反之亦然 |
| && | 短路与 | a&&b | 与逻辑与相同 |
| || | 短路或 | a||b | 与逻辑或相同 |
||和|的区别在于,使用a||b时,如果a为true,则不会计算b,而a|b总是会计算a和b
&&和&的区别在于,使用a&&b时,如果a为false,则不会计算b,而a&b总是会计算a和b
if语句
if语句执行如图所示:
graph LR
a1(开始) --> a2[顺序执行]
a2 --> a4{判断语句}
a4 --true--> a5[执行语句]
a4 --false--> a7[继续执行]
a5 --> a7
也就是说,当表达式为true时,执行特定的语句,那么可以编写代码为
//age为学生成绩
if(age < 60){
System.out.println("该学生成绩不及格");
}
if(age >= 60 && age <= 80){
System.out.println("该学生成绩良好");
}
if(age > 80){
System.out.println("该学生成绩优秀");
}
if-else-else if语句
使用if语句时,有时候会遇到几种可能性,并且考虑代码的阅读和之后的更新迭代,if-else应运而生
graph LR
a1(开始) --> a2[顺序执行]
a2 --> a4{判断语句}
a4 --true--> a5[执行语句]
a4 --false--> a6[执行语句]
a5 --> a7(继续执行)
a6 --> a7
而else-if就是再多一个判断,所以代码可以更新为
//age为学生成绩
if(age < 60){
System.out.println("该学生成绩不及格");
}else if(age >= 60 && age <= 80){
System.out.println("该学生成绩良好");
}else{
System.out.println("该学生成绩优秀");
}
在java的if语句块中,如果只有一行代码,可以省略大括号{},如下
//age为学生成绩
if(age < 60)
System.out.println("该学生成绩不及格");
else if(age >= 60 && age <= 80)
System.out.println("该学生成绩良好");
else
System.out.println("该学生成绩优秀");
当然,在实际的业务代码中,我们是不推荐省略大括号的
switch-case语句
switch是java中的分支语句,用于判断一个固定值的结果,在多种情况的时候,switch比if-else有更好的体验
graph TD
a1(开始) --> a4{switch语句}
a4 --值1--> a5[执行语句]
a4 --值2--> a6[执行语句]
a4 --值3--> a7[执行语句]
a4 --值4--> a8[执行语句]
注意,注意
- switch接受byte,short,char或者int等常量表达式
- 从Java SE 7开始,接受java.lang.String类型
- 可以使用枚举,且不必在case标签中指明枚举名
- 切记,重复的case值是不被允许的
那么我们可以编写代码如下
int type = ...;
switch(type){
case 1:
System.out.println("春");
break;
case 2:
System.out.println("夏");
break;
case 3:
System.out.println("秋");
break;
case 4:
System.out.println("冬");
break;
default:
System.out.println("不存在的类型");
}
需要注意,每个case语句中的break表示跳出,如果没有写break,会继续执行下一条case语句,直到遇到break或执行完switch语句。养成良好编写习惯,从你我做起
例如以下代码在type=1的时候就会输出 春 夏 秋 冬 不存在的类型
int type = ...;
switch(type){
case 1:
System.out.print("春");
case 2:
System.out.print("夏");
case 3:
System.out.print("秋");
case 4:
System.out.print("冬");
default:
System.out.print("不存在的类型");
}