if-else逻辑大坑
前言
if-else逻辑判断错的案例,我在刚开始学习javaSE的时候就遇到过,但是时间好久,昨天又遇到,所以些if-else的时候一点要注意逻辑的重要性,把逻辑梳理好,在书写代码,最后再去想着简化代码
demo示例步骤
1.需求
根据学生成绩判断学生等级
score==100 满分
90<score<100 非常优秀
80<score<90 优秀
60<score<80 良好
score<60 不及格
其余结果 成绩无效
说明:
这里是测试逻辑性,所以等于某个值,我们忽略不统计
2.正确的示例代码
public static void getLevelright(int score){
if(score < 60&score>0){
System.out.println("不及格");
return;
}else if(score<90&&score>80){
System.out.println("优秀");
return;
}else if(score<80&&score>70){
System.out.println("良好");
return;
}else if(score<100&score>90){
System.out.println("非常优秀");
return;
}else if(score==100){
System.out.println("满分");
return;
}else{
System.out.println("成绩无效");
return;
}
}
说明:
其中return可以省略
return关键字的作用(2个)
1.方法的返回值使用
2.方法结束使用
3.错误的示例代码
public static void getLevelVoid2(int score){
if(score < 60){
System.out.println("不及格");
return;
}else if(score<90){
System.out.println("优秀");
return;
}else if(score<80){
System.out.println("良好");
return;
}else if(score<100){
System.out.println("非常优秀");
return;
}else if(score==100){
System.out.println("满分");
return;
}else{
System.out.println("成绩无效");
return;
}
}
4.另一种正确的代码
不建议这样书写,因为逻辑性有点人为控制的意思,稍微不小心可能就写错了
public static void getLevelVoid(int score){
if(score < 60){
System.out.println("不及格");
}else if(score<80){
System.out.println("良好");
}else if(score<90){
System.out.println("优秀");
}else if(score<100){
System.out.println("非常优秀");
}else if(score==100){
System.out.println("满分");
}else{
System.out.println("成绩无效");
}
}
5.使用main方法进行测试
这个类定义了通过分数获取等级的几个方法
package com.shaoming.ifelse;
import jdk.jfr.events.SocketReadEvent;
/**
* @Auther: shaoming
* @Date: 2020/11/28 17:07
* @Description:
*/
public class StudentLevel {
public static void getLevelVoid(int score){
if(score < 60){
System.out.println("不及格");
}else if(score<80){
System.out.println("良好");
}else if(score<90){
System.out.println("优秀");
}else if(score<100){
System.out.println("非常优秀");
}else if(score==100){
System.out.println("满分");
}else{
System.out.println("成绩无效");
}
}
public static void getLevelVoid2(int score){
if(score < 60){
System.out.println("不及格");
return;
}else if(score<90){
System.out.println("优秀");
return;
}else if(score<80){
System.out.println("良好");
return;
}else if(score<100){
System.out.println("非常优秀");
return;
}else if(score==100){
System.out.println("满分");
return;
}else{
System.out.println("成绩无效");
return;
}
}
public static void getLevelright(int score){
if(score < 60&score>0){
System.out.println("不及格");
return;
}else if(score<90&&score>80){
System.out.println("优秀");
return;
}else if(score<80&&score>70){
System.out.println("良好");
return;
}else if(score<100&score>90){
System.out.println("非常优秀");
return;
}else if(score==100){
System.out.println("满分");
return;
}else{
System.out.println("成绩无效");
return;
}
}
}
测试代码
package com.shaoming.ifelse;
/**
* @Auther: shaoming
* @Date: 2020/11/28 17:13
* @Description:
*/
public class AppOfStudentLevel {
public static void main(String[] args) {
StudentLevel.getLevelVoid(71);
System.out.println("===============");
StudentLevel.getLevelVoid2(71);
System.out.println("===============");
StudentLevel.getLevelright(71);
}
}
/*
控制台打印:
良好
===============
优秀
===============
良好
*/
错误原因
public static void getLevelVoid2(int score){
if(score < 60){
System.out.println("不及格");
return;
}else if(score<90){
System.out.println("优秀");
return;
}else if(score<80){
System.out.println("良好");
return;
}else if(score<100){
System.out.println("非常优秀");
return;
}else if(score==100){
System.out.println("满分");
return;
}else{
System.out.println("成绩无效");
return;
}
}
这种方式代码量虽然小,但是顺序不能乱,一旦顺序错乱,就会出现问题,
分数的范围必须是从小到大,层层控制,否则会获取到错误的结果
比如说:score=71,应该是良好,但是score<90也满足,而且socre<90的判断条件在前面,所以这样的结果就是错误的