这几天再给学校里做一个考试系统,有选择题、判断题和多选题,前两个题型判断比较容易,但是在多选题上就卡壳了。要求是正确答案在三个及以上,考生输入的两个及以上正确答案挣1分。全对挣1.5分。
由于是web端的考试系统所以获取到的考生答案和正确答案均为字符串数组
代码如下:
package demo;
import java.util.Arrays;
public class MultSelectTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int count_all = 0;
int count_part = 0;
String[] sure_answer = { "1", "2", "3", "4" };
String[] user_answer = { "1", "2", "3", "4" };
if (user_answer.length <= sure_answer.length) {
//jdk自带方法:判断两个数组是否完成相等(一一对应)
if (Arrays.equals(sure_answer, user_answer)) {
count_all++;
} else if (MultSelectTest.containArray(sure_answer, user_answer)) {
count_part++;
}
}
System.out.println("多选题全对的有:" + count_all + ",多选题部分对的有:" + count_part);
}
// 判断sure_answer数组是否全部包含user_answer数组并且相同的元素不少于两个
public static boolean containArray(String[] sure_answer,
String[] user_answer) {
//true表示多选题部分对,false表示不对
boolean bool = true;
// 用户输入的每一个答案都遍历正确答案数组,如果count等于正确答案数组的个数,则这个答案是错的。
int count = 0;
// 对题的个数:防止出现考生输入一个答案的情况
int ques_count = 0;
for (int i = 0; i < user_answer.length; i++) {
for (int j = 0; j < sure_answer.length; j++) {
if (!user_answer[i].equals(sure_answer[j])) {
count++;
}
}
//看count声明时的注释
if (count == sure_answer.length) {
bool = false;
break;
} else {
//表示这个打算对了
ques_count++;
}
// 出现一个错误选项直接返回false
if (!bool) {
return bool;
}
}
//相对元素的个数在两个以上才算对
if (ques_count <= 1) {
bool = false;
}
return bool;
}
}
在注释里已经写的非常清楚了…..如果有问题的话,欢迎私信或评论….