Java 二维数组实战区间是否连续及区间最小值和最大值判断

目录

1、应用背景

2、二维数组判断区间是否连续

3、成果展现

4、总结

5、参考文章


1、应用背景

        最近项目在做学习系统课程成绩综合评分的时候,需要给学员的成绩按照分数进行不同等级的评分,并且需求要求评分等级能够自定义。具体实现如下图所示:

 其中有如下要求:

  1.  等级名称自定义
  2. 每个等级有最小值和最大值区间为[90,100],[80,90)
  3. 区间除去第一个取闭区间外,其他区间为左开右闭区间,需要后端验证区间内容最小值必须小于最大值
  4. 最后区间必须是[0,N),如果最后区间不是从0开始就会出现一部分未参与学习学员成绩无法落在区间
  5. 相邻两个区间的之间 前一区间的最小值min,和后一个区间的最大值相等,就是两个区间之间是连续的。
  6. 其中前端开发人员需要限定输入必须为数字,同时控制最大值不用输入。

2、二维数组判断区间是否连续

courseWeight.validate.gradeRule.minZero=成绩等级规则最小值必须为0
courseWeight.validate.gradeRule.maxHundred=成绩等级规则最大值必须为100
courseWeight.validate.gradeRule.minGreaterMax=成绩等级区间 {0} 最小值应小于最大值 
courseWeight.validate.gradeRule.intervalContinuity=成绩等级区间 {0} {1} 之间不连续 

/**
     * 验证等级成绩是否连续
     *
     * @param gradeRuleList
     * @return
     */
    private String validGradeRuleInterval(List<GradeRuleVO> gradeRuleList) {
        String validResult = null;
        // List 转换 二维数组
        Integer gradeRuleSize = gradeRuleList.size();
        Long[][] gradeRuleArray = new Long[gradeRuleSize][2];
        for (int i = 0; i < gradeRuleSize; i++) {
            GradeRuleVO gradeRuleVO = gradeRuleList.get(i);
            gradeRuleArray[i][0] = gradeRuleVO.getMin();
            gradeRuleArray[i][1] = gradeRuleVO.getMax();
        }
        //验证等级规则最大值必须100
        if (!BusinessConstants.CONSTANT_LONG_HUNDRED.equals(gradeRuleArray[0][1])) {
            validResult = MessageUtils.message("courseWeight.validate.gradeRule.maxHundred");
            return validResult;
        }
        //判断最后区间是否未0-某个值
        if (!BusinessConstants.CONSTANT_LONG_ZERO.equals(gradeRuleArray[gradeRuleSize - 1][0])) {
            validResult = MessageUtils.message("courseWeight.validate.gradeRule.minZero");
            return validResult;
        }
        StringBuffer mutiIntervalValid = new StringBuffer();
        boolean isError = false;
        for (int k = 0; k < gradeRuleArray.length; k++) {
            //验证区间最小值大于最大值情况
            if (gradeRuleArray[k][0] >= gradeRuleArray[k][1]) {
                String preIntervalInfo = "";
                if (k == 0) {
                    preIntervalInfo = " [" + gradeRuleArray[k][0] + "," + gradeRuleArray[k][1] + "] ";
                    validResult = MessageUtils.message("courseWeight.validate.gradeRule.minGreaterMax");
                    validResult = MessageFormat.format(validResult, preIntervalInfo);
                } else {
                    preIntervalInfo = " [" + gradeRuleArray[k][0] + "," + gradeRuleArray[k][1] + ") ";
                    validResult = MessageUtils.message("courseWeight.validate.gradeRule.minGreaterMax");
                    validResult = MessageFormat.format(validResult, preIntervalInfo);
                }
                mutiIntervalValid.append("\n" + validResult);
                isError = true;
            }
        }
        if (isError) {
            return mutiIntervalValid.toString();
        }
        for (int k = 0; k < gradeRuleArray.length - 1; k++) {
            //验证区间不连续
            if (!gradeRuleArray[k][0].equals(gradeRuleArray[k + 1][1])) {
                String preIntervalInfo = "";
                validResult = MessageUtils.message("courseWeight.validate.gradeRule.intervalContinuity");
                if (k == 0) {
                    preIntervalInfo = " [" + gradeRuleArray[k][0] + "," + gradeRuleArray[k][1] + "] ";
                } else {
                    preIntervalInfo = " [" + gradeRuleArray[k][0] + "," + gradeRuleArray[k][1] + ") ";
                }
                String nextIntervalInfo = "[" + gradeRuleArray[k + 1][0] + "," + gradeRuleArray[k + 1][1] + ")";
                validResult = MessageFormat.format(validResult, preIntervalInfo, nextIntervalInfo);
                mutiIntervalValid.append("\n" + validResult);
                isError = true;
            }
        }
        if (isError) {
            return mutiIntervalValid.toString();
        } else {
            return null;
        }

3、成果展现

4、总结

       我们在实际实现功能过程之中,需要后端需要做相关验证,同时也需要前端限定最大值不能输入,开始产品设计过程之中最大值如果输入就很难控制。同时有些验证需要前端进行验证和限定。通过此次功能的实现,能够使用二维数组进行验证区间之间的连续性,验证区间之间的连续性不仅仅适用于等级评分,还可以应用时段之间的连续性验证

原始原型设计图:

以前其他系统实现的方案

 

5、参考文章

       Java 校验是否为连续的区间

猜你喜欢

转载自blog.csdn.net/jianxia801/article/details/121583635