123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package com.xkl.cdl.util
-
- import com.xkl.cdl.data.bean.BaseWord
-
- /**
- * author suliang
- * create 2022/4/22 17:12
- * Describe: 规则
- * @property originList 源数据
- * @property cycleTime 循环次数
- */
- class LearnRuleUtil<T : BaseWord>(private val originList : List<T>, private val cycleTime : Int) {
- //源数据学习位置
- private var originLearnPosition : Int = 0
- //学习列表位置
- private var currentLearnPosition : Int = -1
- //学习列表数据
- private var currentList = mutableListOf<T?>(null)
-
- //当前答题是否错误
- private var currentIsError = false
-
- //学前总和课时前测试错误集合
- var examErrorMap = hashMapOf<String,Boolean>()
- //新错误集合
- var newErrorMap = hashMapOf<String,Boolean>()
- //第一次点击正确的集合, 如果后面再点击错误,需要移除并添加到错误集合中
- var newCorrectMap = hashMapOf<String,Boolean>()
-
-
-
- fun getNext(): T? {
- if (currentIsError || isHaveNext()){
- return nextWord()
- }
- return null
- }
-
- /**
- * 是否还有下一单词
- * @return Boolean
- */
- private fun isHaveNext():Boolean{
- //如果当前学习下标为-1,即第一次进入学习,直接返true
- if (currentLearnPosition == -1) return true
- //元数据是否学习完成,未学习完成,则还有学习数据, 元数据学习完成,还需要判断当前学习列表是否学习完成
- if (!isLearnOverForOrigin()) return true
- //判断当前列表是否学习完成
- val currentLearnWord = currentList[currentLearnPosition]!!
- var nextWord: T? = null
- //循环找寻与当前word不一样的数据
- if (currentLearnPosition + 1 < currentList.size-1) {
- for (i in currentLearnPosition + 1 .. currentList.size - 1) {
- currentList[i]?.let {
- if (currentLearnWord.wordId != it.wordId ){
- nextWord = it
- }
- }
- if (nextWord != null) break
- }
- }
- //如果获取不到下一个不为空的数据,则还有下一条,否则结束了
- return nextWord != null
- }
-
- /**
- * 源数据是否学习完成
- */
- fun isLearnOverForOrigin():Boolean{
- return originLearnPosition >= originList.size -1
- }
-
- /**
- * 获取下一条数据
- */
- private fun nextWord(): T?{
- //声明下一条数据
- var next : T? = null
- //当前列表 学习位置+1
- currentLearnPosition ++
- when{
- //从当前集合获取
- currentList.size > currentLearnPosition -> {
-
- }
- //从源数据据列表获取
- else -> {
- originLearnPosition++
- if (!isLearnOverForOrigin()) {
- next = originList[originLearnPosition]
- //元数据如果是课时学前或总测的错误数据,那么就需要按照小循环插入
- }
- }
- }
- return next
- }
-
-
-
- /** 是否在错误列表中 */
-
-
- }
|