派生自 projectDept/qhighschool

Administrator
2022-11-21 8d0e57a64fe6c31559ffcf38859fb1f5084e1e23
src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
@@ -41,10 +41,10 @@
    *            结束位置
    * @return
    */
   public static int[][] merge(int[][] orig, int start, int end) {
   public static Double[][] merge(Double[][] orig, Double start, Double end) {
      // 中间合并结果
      int[][] result = new int[orig.length + 1][2];
      Double[][] result = new Double[orig.length + 1][2];
      int j = 0;
      int i = 0;
@@ -57,13 +57,13 @@
         switch (action) {
         case ACTION_INSERT: {
            result[j++] = new int[] { start, end };
            result[j++] = new Double[] { start, end };
            result[j++] = orig[i];
            breakFlag = true;
            break;
         }
         case ACTION_MERGE_01: {
            result[j++] = new int[] { start, orig[i][1] };
            result[j++] = new Double[] { start, orig[i][1] };
            breakFlag = true;
            break;
         }
@@ -95,12 +95,14 @@
      }
      // 如果本次学习终止位置超出以往所有学习进度,则添加到最后
      if (orig.length == 0 || pos(end, orig[orig.length - 1]) == POS_AFTER) {
         result[j++] = new int[] { start, end };
      if (orig.length == 0 ) {
         result[j++] = new Double[] { start, end };
      }else if(pos(end, orig[orig.length - 1]) == POS_AFTER){
         result[j++] = new Double[] { start, end };
      }
      // 最终合并结果,去掉中间合并结果的多出为空的元素
      int[][] finalResult = new int[j][2];
      Double[][] finalResult = new Double[j][2];
      for (int k = 0; k < result.length; k++) {
         if (result[k][0] == 0 && result[k][1] == 0 && k>0) {
@@ -120,18 +122,18 @@
    *            全部学习进度
    * @return
    */
   public static int sum(int[][] orig) {
   public static Double sum(Double[][] orig) {
      int sum = 0;
      Double sum = 0.0;
      for (int[] item : orig) {
      for (Double[] item : orig) {
         sum += (item[1] - item[0] + 1);
      }
      return sum;
   }
   private static int action(int[] segment, int start, int end) {
   private static int action(Double[] segment, Double start, Double end) {
      int startPos = pos(start, segment);
      int endPos = pos(end, segment);
@@ -163,7 +165,7 @@
   }
   private static int pos(int index, int[] range) {
   private static int pos(Double index, Double[] range) {
      if (index < range[0]) {
         return POS_BEFORE;
      }