如何让Java的switch语句仅匹配等于100的分数?代码问题求助
解决Java分数判断逻辑问题:仅100显示HD-10,超100输出Invalid
我明白你的问题啦——现在输入100到109之间的数值时,程序都会输出“HD-10”,但你希望只有当输入恰好是100时才显示这个结果,任何超过100的数值都输出“invalid”。咱们先来分析问题出在哪,再给出修改方案:
问题根源
你代码里的mark = (int)total / 10是整数除法,Java里整数除法会直接截断小数部分。比如:
- 100 / 10 = 10
- 105 / 10 = 10(截断了5)
- 109 / 10 = 10(截断了9)
所以这三个值都会匹配switch里的case 10,导致输出相同的结果。
解决方案
有两种简单的修改方式,任选其一都能实现你的需求:
方式一:提前过滤超过100的数值
在计算mark之前,先判断输入的分数是否大于100,如果是直接输出“Invalid”并结束逻辑,这样后续的switch就只会处理0-100之间的数值:
import java.util.Scanner; public class GradeCase_testResults { public static void main(String [] args) { int total; // 没必要用float,输入是整数,直接用int更合适 int mark; Scanner sc = new Scanner(System.in); System.out.println("Please enter the student's mark"); total = sc.nextInt(); // 新增:判断分数是否超过100 if (total > 100) { System.out.println("Invalid"); sc.close(); return; // 直接结束方法,不执行后续逻辑 } mark = total / 10; switch(mark) { case 1: case 2: case 3: case 4: System.out.println("F-" + mark); break; case 5: System.out.println("P-5"); break; case 6: System.out.println("C-6"); break; case 7: System.out.println("D-7"); break; case 8: System.out.println("HD-8"); break; case 9: System.out.println("HD-9"); break; case 10: System.out.println("HD-10"); break; default: System.out.println("Invalid"); break; } sc.close(); } }
方式二:在case 10中做二次判断
如果不想提前判断,可以在switch的case 10分支里,再检查原分数是否恰好等于100,是的话输出“HD-10”,否则输出“Invalid”:
import java.util.Scanner; public class GradeCase_testResults { public static void main(String [] args) { int total; int mark; Scanner sc = new Scanner(System.in); System.out.println("Please enter the student's mark"); total = sc.nextInt(); mark = total / 10; switch(mark) { case 1: case 2: case 3: case 4: System.out.println("F-" + mark); break; case 5: System.out.println("P-5"); break; case 6: System.out.println("C-6"); break; case 7: System.out.println("D-7"); break; case 8: System.out.println("HD-8"); break; case 9: System.out.println("HD-9"); break; case 10: // 新增:判断是否恰好是100 if (total == 100) { System.out.println("HD-10"); } else { System.out.println("Invalid"); } break; default: System.out.println("Invalid"); break; } sc.close(); } }
另外提个小建议:你代码里把total定义为float但用sc.nextInt()赋值,其实完全没必要,直接用int类型就够了,能避免不必要的类型转换~
内容的提问来源于stack exchange,提问作者James Wong
相关产品推荐
相关产品推荐

