Java:实现基于数组题目分值的百分制得分计算方法求助
Java 方法实现:按题目权重计算百分制得分
没问题,我来帮你搞定这个得分计算的Java方法!根据你的需求,我们需要根据每道题的权重计算实际得分,再转换成百分制返回。下面是完整的实现方案:
核心思路
- 接收两个数组:一个存储各题的权重分值,另一个存储答题结果(用
boolean表示,true=答对,false=答错) - 先做参数合法性校验,避免空指针、数组长度不匹配这类问题
- 遍历数组计算总权重分和实际获得的分数
- 用「实际得分 / 总权重分 * 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
相关产品推荐
相关产品推荐

