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

Java:实现基于数组题目分值的百分制得分计算方法求助

Java 方法实现:按题目权重计算百分制得分

没问题,我来帮你搞定这个得分计算的Java方法!根据你的需求,我们需要根据每道题的权重计算实际得分,再转换成百分制返回。下面是完整的实现方案:

核心思路

  1. 接收两个数组:一个存储各题的权重分值,另一个存储答题结果(用boolean表示,true=答对,false=答错)
  2. 先做参数合法性校验,避免空指针、数组长度不匹配这类问题
  3. 遍历数组计算总权重分和实际获得的分数
  4. 用「实际得分 / 总权重分 * 100」计算百分制结果,返回浮点型数值

完整代码实现

public class ScoreCalculator {
    public static double calculatePercentageScore(int[] questionWeights, boolean[] answers) {
        // 参数合法性校验:防止空指针
        if (questionWeights == null || answers == null) {
            throw new IllegalArgumentException("权重数组和答题结果数组不能为null");
        }
        // 确保两个数组长度一致,不然没法对应题目
        if (questionWeights.length != answers.length) {
            throw new IllegalArgumentException("权重数组和答题结果数组的长度必须一致");
        }
        // 没有题目时直接返回0分
        if (questionWeights.length == 0) {
            return 0.0;
        }

        int totalPossibleScore = 0;
        int userObtainedScore = 0;

        // 遍历计算总分和实际得分
        for (int i = 0; i < questionWeights.length; i++) {
            int weight = questionWeights[i];
            // 额外校验:题目权重不能为负数,不然逻辑不合理
            if (weight < 0) {
                throw new IllegalArgumentException("第" + (i + 1) + "题的权重不能为负数,当前值:" + weight);
            }
            totalPossibleScore += weight;
            // 答对的话累加对应权重分
            if (answers[i]) {
                userObtainedScore += weight;
            }
        }

        // 避免除以0的极端情况(比如所有题权重都是0)
        if (totalPossibleScore == 0) {
            return 0.0;
        }

        // 计算百分制,注意强制类型转换避免整数除法
        return (double) userObtainedScore * 100 / totalPossibleScore;
    }

    // 测试你给的示例场景
    public static void main(String[] args) {
        int[] questionWeights = {3, 1, 2};
        boolean[] userAnswers = {true, false, true};
        double finalScore = calculatePercentageScore(questionWeights, userAnswers);
        // 格式化输出保留1位小数,结果就是83.3
        System.out.printf("最终百分制得分:%.1f%n", finalScore);
    }
}

代码细节说明

  • 参数校验:加了多层判断,让方法更健壮,遇到非法输入会抛出清晰的异常信息,方便调试
  • 类型转换:计算时把int类型的得分强制转为double,避免整数除法导致的精度丢失(比如5/6如果用整数除法会得到0,转成double后才会得到0.833...)
  • 格式化输出:测试用了printf("%.1f")来保留1位小数,如果你需要更多小数位,把1改成对应的数字即可(比如%.2f就是保留两位)

扩展优化

如果需要更精确的格式控制(比如统一保留2位小数),可以用DecimalFormat类:

import java.text.DecimalFormat;

// 在计算百分制的地方替换成:
DecimalFormat scoreFormatter = new DecimalFormat("#.00");
return Double.parseDouble(scoreFormatter.format((double) userObtainedScore * 100 / totalPossibleScore));

这样处理后,结果会严格保留两位小数,比如83.33而不是83.3。

内容的提问来源于stack exchange,提问作者5-May

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:38:43