该方法传入用户口语考试卷选择题的记录集合,和正确答案。返回用户选项错误最多的选项,
精简前代码
该方法首先定义4个变量,然后挑选除了正确选项,用户选择错误选项的一个累加,int aCount,int bCount,
int cCount,int dCount,然后利用map:正确选项为key,value为错误选项数量的累加。对map中的value进行降序排序,选择出第一个最多的key. 作为返回参数。
/**
* 易混淆选项
*/
private int getConfusingOptions(List<DdbUserOralFixedDetail> ddbUserOralFixedDetails, int correctOptions) {
int aCount = 0;
int bCount = 0;
int cCount = 0;
int dCount = 0;
for (DdbUserOralFixedDetail ddbUserOralFixedDetail : ddbUserOralFixedDetails) {
if (ddbUserOralFixedDetail.getOptions() != correctOptions) {
switch (ddbUserOralFixedDetail.getOptions()) {
case 0:
aCount += 1;
break;
case 1:
bCount += 1;
break;
case 2:
cCount += 1;
break;
case 3:
dCount += 1;
break;
default:
break;
}
}
}
int confusingOptions = -1;
if (aCount != 0 || bCount != 0 || cCount != 0 || dCount != 0) {
final Map<String, Integer> map = new HashMap<>();
map.put("0", aCount);
map.put("1", bCount);
map.put("2", cCount);
map.put("3", dCount);
final List<Map.Entry<String, Integer>> list = new ArrayList(map.entrySet());
Collections.sort(list, (o1, o2) -> (o2.getValue() - o1.getValue()));
confusingOptions = Integer.parseInt(list.get(0).getKey());
}
return confusingOptions;
}
精简后代码
直接利用数组,下标为选择题选项,value为选择题错误数量,利用counts[maxIdx]与每个选项进行对比,挑选出错误最多的选项
/**
* 易混淆选项 - 选择题中错误选项占比最多的选项
*/
private int getConfusingOptions(List<DdbUserOralFixedDetail> ddbUserOralFixedDetails, int correctOptions) {
final int[] counts = { 0, 0, 0, 0 };
int maxIdx = 0;
for (DdbUserOralFixedDetail ddbUserOralFixedDetail : ddbUserOralFixedDetails) {
final int option = ddbUserOralFixedDetail.getOptions();
if (option != correctOptions) {
if (option >= 0 && option <= 3) {
counts[option] += 1;
if (maxIdx != option && counts[option] > counts[maxIdx]) {
maxIdx = option;
}
}
}
}
return counts[maxIdx] == 0 ? -1 : maxIdx;
}