我正在使用intellij&java制作一个可以根据用户输入来计算用户等级的程序。到目前为止,我已经成功地使用扫描仪收集了用户的输入并获得了平均值。我使用平均值通过if语句打印字母等级。但是我的程序仅打印出F级的字母成绩,即使我输入的平均分数为90,也不会打印其他任何字母。
字符串等级;
if (avg >= 90.0 ) {
grade = "A";
} else if (avg >=80.0) {
grade = "B";
} else if (avg >=70.0){
grade = "C"
} else if (avg >=60.0) {
grade = "D";
} else {
grade = "F";
System.out.println("Grade is " + grade );
}
}
}
我希望程序检查语句是否其他,但是如果成绩的平均分数为60或更高,则不会打印成绩为statement的语句,而只会显示平均值。
答案 0 :(得分:2)
问题在于您的print语句位于else块内,但您不想仅在else确实要始终打印且应位于if-else块之外时才打印。
if(A){
....// here you are when A is true
} else if(B){
.... //here you are when A is false and B is true
} else {
.... //here you will be when A and B are false
}
System.out.println("grade is:"+ grade); //here you are outside the else block so It does not depend on A nor on B value
答案 1 :(得分:1)
您必须分两步进行操作,因为此处仅在一种情况下打印:
avg
在哪个范围内并设置等级if (avg >= 90.0) {
grade = "A";
} else if (avg >= 80.0) {
grade = "B";
} else if (avg >= 70.0) {
grade = "C";
} else if (avg >= 60.0) {
grade = "D";
} else {
grade = "F";
}
System.out.println("Grade is " + grade);
此外,对于范围问题,我刚刚发现NavigableMap
的用法像
NavigableMap<Double, String> map = new TreeMap<>();
map.put(0.0, "F");
map.put(60.0, "D");
map.put(70.0, "C");
map.put(80.0, "B");
map.put(90.0, "A");
System.out.println("Grade is " + map.floorEntry(avg).getValue());