You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:17:12