If-else 范围检查链未按预期执行

If-else chain of range-checks not executing as expected

当我传递某个浮点值来与我的条件语句进行比较时,它总是执行 else 部分。

有一些变量的值:

float total = 74.67 ; 
String grade = "", point = "";

使用这些值我想这样做:

if(total>=80){
        grade = "A+";
        point = "4.00";
}else if(total<=79 && total>=75){
        grade = "A";
        point = "3.75";
}else if(total>=70 && total<=74) {
        grade = "A-";
        point = "3.50";
}else if(total<=65 && total>=69){
        grade = "B+";
        point = "3.25";
}else if(total<=64 && total>=60){
        grade = "B";
        point = "3.00";
}else if (total<=59 && total>=55){
        grade = "B-";
        point = "2.75";
}else if (total<=54 && total>=50){
        grade = "C+";
        point = "2.50";
}else if(total<=49 && total>=45){
        grade = "C";
        point = "2.25";
}else if (total<=44 && total>=40){
        grade = "D";
        point = "2.00";
}else {
        grade = "F";
        point = "0.00";
}

但它总是显示等级 = "F" 和分数 = "0.00"。

如果我写这个,

if(total>=70 && total<=74) {
        grade = "A-";
        point = "3.50";
    }

它显示等级 ="" 和分数 =""。

the value of total is showing nicely but there are problem with grade and point. can anyone tell me what is the problem?

您检查的是 79-75 和 70-74,但 74-75 之间缺少一部分

...
else if(total<=79 && total>=75){ 
        grade = "A";
        point = "3.75";
    }else if(total>=70 && total<=74) {
        grade = "A-";
        point = "3.50";
    }
...

java total>=70 && total<=74 更改为 java total>=70 && total<75 包括从 70 到小于 75

因此您的最终代码将是

if(total>=80){
        grade = "A+";
        point = "4.00";
    }else if(total<80 && total>=75){
        grade = "A";
        point = "3.75";
    }else if(total>=70 && total<75) {
        grade = "A-";
        point = "3.50";
    }else if(total>=65 && total<70){ // here was another mistake
        grade = "B+";
        point = "3.25";
    }else if(total<65 && total>=60){
        grade = "B";
        point = "3.00";
    }else if (total<60 && total>=55){
        grade = "B-";
        point = "2.75";
    }else if (total<55 && total>=50){
        grade = "C+";
        point = "2.50";
    }else if(total<50 && total>=45){
        grade = "C";
        point = "2.25";
    }else if (total<45 && total>=40){
        grade = "D";
        point = "2.00";
    }
    else {
        grade = "F";
        point = "0.00";
    }

我想你应该试试

如果你想在 "Grade A" 中打印这个值,那么试试

if(total<80 && total>74){
    grade = "A";
    point = "3.75";
}else if(total>=70 && total<=74) {
    grade = "A-";
    point = "3.50";
}

如果你想在 "Grade A-" 中打印这个值,那么试试

 if(total<80 && total>=75){
    grade = "A";
    point = "3.75";
}else if(total>=70 && total<75) {
    grade = "A-";
    point = "3.50";
}

None 条件在这里得到满足,这就是它执行 else 部分的原因。

But this would happen with not only 74.67 but with many other values as well your condition should be like this,

if(total>81){
        grade = "A+";
        point = "4.00";
    }else if(total<80 && total>76){
        grade = "A";
        point = "3.75";
    }else if(total>71 && total<75) {
        grade = "A-";
        point = "3.50";
    }else if(total>66 && total<70){ // here was another mistake
        grade = "B+";
        point = "3.25";
    }else if(total<65 && total>61){
        grade = "B";
        point = "3.00";
    }else if (total<60 && total>56){
        grade = "B-";
        point = "2.75";
    }else if (total<55 && total>51){
        grade = "C+";
        point = "2.50";
    }else if(total<50 && total>46){
        grade = "C";
        point = "2.25";
    }else if (total<45 && total>41){
        grade = "D";
        point = "2.00";
    } else {
        grade = "F";
        point = "0.00";
    }

And here instead of if else you should use switch case, it would be more optimized and will take less compile time