在线考试_____计算分值(单选,多选,判断)
// 计算分数 @ResponseBody @RequestMapping(value = "/addPrice", method = RequestMethod.POST) public String addPrice(TestQuestion ques, HttpServletRequest request) { // 获取前台传 的 与value 值 String[] optionType = request.getParameterValues("optionId"); // 获取前台获取的 id String[] testId = request.getParameterValues("testId"); for (String arr : testId) { System.err.println("test——id" + arr); } for (String optionTypes : optionType) { System.err.println("optionId" + optionTypes); } int sum = 0; // 用 页面的题目id 找出正确答案 与 option表中的内容,查看是否是一致的 for (int i = 0; i < testId.length; i++) { // 获取 question 表中的内容 TestQuestion question = disposeService.getqustion(testId[i]); // 通过题目id来获取option表的内容。 List<Map<String, Object>> optionList = disposeService.queryOptions(testId[i]); // 定义空集合,来存储option表的id; List<String> list = new ArrayList<String>(); // 定义空集合,来存储页面输入的答案。做比较 List<String> answerList = new ArrayList<String>(); // 遍历optionList获取所有的 选项,选项id for (Map<String, Object> map : optionList) { // 将页面题目所对应的选项 存到list集合当中 String answer = map.get("option_id").toString(); // 将 option_id 所对应的选项 存到list集合中去 // String optionTypeXan= // disposeService.getOptionType(answer).getOptionType(); list.add(answer); } // 循环遍历 循环页面选项,判断,选项是否存在于通过id 查找出来的选项中 for (int j = 0; j < optionType.length; j++) { // 进行比较 如果存在就 存进页面输入的答案的集合 if (!StringUtils.hasText(optionType[j])) { continue; } if (list.contains(optionType[j])) { answerList.add(optionType[j]); } } // 判断 通过 题目id 获取的optionList里面有木有值,如果有值就判断做了这个题,没有值,就判断没做这个题 if (answerList.size() < 1) { continue; } // 进行 页面选项与正确答案是否是相同的 // 接收正确答案, question 前面定义的option 表中所有的正确答案 String quAnswer = question.getTestRightOptions(); // 1. 单选,2.多选,3.判断 if ("1".equals(question.getTestFlag()) || "3".equals(question.getTestFlag())) { System.out.println("题目Id:" + question.getTestId()); System.out.println("用户选择Id:" + answerList.get(0)); // 接收 用户输入的选项的id optionId String optionId = answerList.get(0); // 通过optionid 获得所有的信息 TestOption option = disposeService.getOption(optionId); System.out.println(quAnswer + "===" + option.getOptionType()); if (quAnswer.equals(option.getOptionType())) { System.out.println("对了一个"); sum = sum + 1; System.out.println("对了一个" + sum); } } // 多选 if ("2".equals(question.getTestFlag())) { // 对正确答案进行切割 String[] quAnswers = quAnswer.split(","); // 第一个是用错误来判断,计算分数。 int errorNum = 0; for (String answer : answerList) { TestOption option = disposeService.getOption(answer); if (quAnswer.lastIndexOf(option.getOptionType()) == -1) { errorNum++; } } System.out.println("错了:" + errorNum + "个"); if (errorNum > 0) { continue; } else { System.err.println("sum====;" + sum); if (quAnswers.length == answerList.size()) { System.err.println("sum;" + sum); sum = sum + 2; } } } } System.err.println("得分" + sum); request.setAttribute("sum", sum); DecimalFormat df = new DecimalFormat("#.0"); return df.format(sum); }