码迷,mamicode.com
首页 > 其他好文 > 详细

在线考试_____计算分值(单选,多选,判断)

时间:2019-11-01 09:42:52      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:对比   question   java   内容   变量   val   sys   方法   一个   

	// 判断分数
	@ResponseBody
	@RequestMapping(value = "/queryScore")
	public String queryScore(HttpServletRequest request) {
		//获取页面的题目id
		String[] testIds = request.getParameterValues("testId");
		// 获取页面选项
		String[] optionTypes = request.getParameterValues("answr");	
		//定义全局变量num,统计分数
		int num=0;
		//第一个for循环,循环页面题目的id,通过id来获取题目以及正确答案
		for (int i = 0; i < testIds.length; i++) {
			//定义空集合,来存储option表的id;
			List<String> list = new ArrayList<String>();
			//定义空数组来存储页面输入的答案。
			List<String> answerList = new ArrayList<String>();
			//通过id来获取question表里面的内容。
			TestQuestion question = typeQuestionService.getQuestion(testIds[i]);
			//通过id来获取option表的内容。
			List<Map<String, Object>> optionList = typeQuestionService.queryOption(testIds[i]);
			//第二个for循环,来循环遍历出option表的所有内容。
			for (Map<String, Object> map : optionList) {
				//将页面上与之对应的题目的选项id存储list集合。
				String answer = map.get("option_id").toString();
				list.add(answer);
			}
			//第三个for循环,获取页面选项的答案。
			for (int j = 0; j < optionTypes.length; j++) {
				//如果页面上每个题包含在option表的id对应下的选项下。
				if(list.contains(optionTypes[j])){
					//将包含的答案存储到答案集合answer中。
					answerList.add(optionTypes[j]);
				}
			}
			//如果所有的输入的答案长度<1,继续循环(无答案)。
			if(optionList.size()<1){
				continue;
			}
			//取出questtion表正确答案
			String quAnswer = question.getTestRightOptions();
			//1,单选,2,多选,3判断。
			//如果对应的标记是1,3,那么走这个方法。
			if("1".equals(question.getTestFlag())||"3".equals(question.getTestFlag())){
				//因为是单选和判断,所以只需要取出第一个答案,错误即全错误。
				if(quAnswer.equals(optionList.get(0))){
					//加1分
					num = num + 1;
				}
			}
			//如果对应的标记是2,那么走这个方法。
			if("2".equals(question.getTestFlag())){
				//因为多选在数据库中存储的是正确答案的分割字符串,所以需要用String数组接收
				String[] quAnswers = quAnswer.split(",");
				//1、第一种方法。
				//全局变量,默认错误数量是0,以便于后面计算错误的数量,如果错一个直接
				//第一个是用错误来判断,计算分数。
//				int errorNum = 0;
				//第一个for,循环页面答案。
//				for (String answer : answerList) {
				//里层for,用来循环判断正确答案与页面输入答案的内容对比。
//					for (int j = 0; j < quAnswers.length; j++) {
				//如果页面答案和正确答案内容不一致,则+1
//						if(!answer.equals(quAnswers[i])){
//							errorNum++;
//						}
//					}
//				}
				//如果错误大于0,直接结束本循环,继续下一循环。
//				if(errorNum>0){
//					continue;
//				}else{
				//如果正确答案的长度==页面答案的长度,所以分数+2,(全对)
//					if(quAnswers.length==answerList.size()){
//						num = num + 2;
//					}
				//正确的数量,默认是0。
//					int rightNum = 0;
				//第二个for循环,循环正确答案。
//					for (String answer : answerList) {
				//循环正确答案,用来判断正确选项答对几个。
//						for (int j = 0; j < quAnswers.length; j++) {
//							if(answer.equals(quAnswers[i])){
				//如果一样,+1,如果相同,2
//								rightNum++;
//							}
//						}
//					}
				//通过上面的方法来获取半对的分数。
//					num = num + 1*rightNum;
//				}
				int rightNum = 0;
				for (String answer : answerList) {
					for (int j = 0; j < quAnswers.length; j++) {
						if(answer.equals(quAnswers[i])){
							rightNum++;
						}
					}
				}
				if(rightNum==answerList.size()){
					if(rightNum==quAnswers.length){
						num = num + 2;
					}else{
						num = num + 1*rightNum;
					}
				}
			}
		}
	
		return "/sys/queryTest";
	}

 

在线考试_____计算分值(单选,多选,判断)

标签:对比   question   java   内容   变量   val   sys   方法   一个   

原文地址:https://www.cnblogs.com/layuechuquwan/p/11774940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!