对数组的运用-精简代码

本文介绍了如何精简Java代码以统计用户口语考试选择题错误最多选项的过程。精简前,代码使用了四个独立变量和一个Map来实现;精简后,通过数组实现,直接比较数组中错误数量,提高了代码效率。
摘要由CSDN通过智能技术生成

该方法传入用户口语考试卷选择题的记录集合,和正确答案。返回用户选项错误最多的选项,

精简前代码

该方法首先定义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;
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值