【Android】按照遗忘规律自动制定背单词计划功能的实现 |
您所在的位置:网站首页 › 艾宾浩斯背单词软件app › 【Android】按照遗忘规律自动制定背单词计划功能的实现 |
🚀🚀🚀🚀🚀🚀这是一个从零开始持续更新的项目,所有涉及到的关键点都在专栏里,目前还没有开发完成,本文中所有的代码都已上传,是可以免费看的,项目地址本文最后。 内容概述人们在记忆单词的时候会呈现出一定的遗忘规律,所以对于陌生的单词,根据记忆的情况,进行间断性的复习是非常有必要的。 艾宾浩斯遗忘曲线 上图是著名的艾宾浩斯遗忘曲线,从图中可以看出,在记忆后的两天内会遗忘百分之八十,所以在两天内进行及时进行复习是十分重要的。利用上图曲线所展现的规律,阶段性的进行复习才能,保证单词记忆的牢固性。
单个单词学习流程 如上图所示,每一个单词在一开始都会根据用户提供的计划加入一个时间戳,每次用户打开软件需要学习的时候,都会在本地单词库中筛选出到达计划时间的单词,加入用户有一天没有学习,那么在给出要学习单词列表的时候,也会将本应该出现在昨天的单词也补上,这样有效保证用户能够按照计划完成整个词书的背诵任务。使用时间戳的形式存储日期,可以方便快捷地进行日期的计算与比较。 这里待学习的单词由三部分组成: 1.按照计划应该学习的新单词2.之前已经学习过,到达复习阶段的旧单词3.计划时间内没有去学习的单词masterDegree 掌握程度 -1 生词 0 新词 1 初步掌握 2 中度掌握 3 完全掌握 单词掌握程度表单 每一个单词有一个掌握程度属性,每一次答错,都会将掌握程度置为最低,所以需要联讯答对三次才能认定为已经完全掌握此单词。新学习的单词会以选择题的形式来学习,会给出四个待选的词义,一个是正确词义,另外三个是随机生成的错误词义,如果用户选择正确,掌握程度会加一,并且按照掌握程度给出下次计划学习的时间戳,一般都是两天后会进行重新学习,直到完全掌握,如果选择错误,不管已经答对了几次都会被当作为生词,并且会跳转到单词详情界面,展示联想记忆的图片,巧计的方法,例句以及词组等信息,用户完成记忆后点击继续,跳转到下一个需要学习的单词。而复习的阶段只会给出单词的英文让用户选择认识或者不认识,如果不认识则标记为生词,并且加入到复习的列表,复习完本轮列表后,在下一轮列表继续复习。如果认识,则代表完成本次学习,跳转到下一个需要复习的词语,并且将masterDegree置为0。 关键代码讲解 时间戳相关 Calendar类java.util.Calendar类是一个抽象类,是java日期处理的核心类之一。Calendar类为操作日历字段,及其与特定瞬间之间的转换提供了方法。日历字段包含YEAR、MONTH、DAY_OF_MONTH、HOUR等,它们都是Calendar类的静态常量。 具体的用法就不细讲了,详细的用法推荐看这篇博客: Java—java.util.calendar类详解_空城里的往日时光的博客-CSDN博客_java.util.calendar目录一、概述二、静态常量三、静态方法四、实例五、GregorianCalendar类一、概述java.util.Calendar类是一个抽象类,是java日期处理的核心类之一。Calendar类为操作日历字段,及其与特定瞬间之间的转换提供了方法。日历字段包含YEAR、MONTH、DAY_OF_MONTH、HOUR等,它们都是Calendar类的静态常量。二、静态常量... 在java中我们一般用text包中的SimpleDateFormat来格式化时间,这个类在对时间的处理上可以算是专业选手。向上追根,SimpleDateFormat类继承于DateFormat,DateFormat继承于Format。Format提供了很多对信息,数字,日期等等内容的格式化,我们这次主要看一下SimpleDateFormat的格式化方法。另外不能忽视的是,SimpleDateFormat除了格式化,还具有解析一个String变为Date的功能。 Datejava.util.Date 类 表示特定的瞬间,精确到毫秒。它允许把日期表示为年月日小时,也允许初始化和解析日期字符串 常用方法 public String format(Date date) :将Date对象格式化为字符串。public Date parse(String source) :将字符串解析为Date对象。 public class DateFormatMethod { public static void main(String[] args) { //把Date对象转换成String Date date = new Date(); // 创建日期格式化对象,在获取格式化对象时可以指定风格 DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); String str = df.format(date); System.out.println(str); // 2008年1月23日 //把String转换成Date对象 DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); String str = "2020年12月11日"; Date date = df.parse(str); System.out.println(date); // Tue Dec 11 00:00:00 CST 2020 } }一个小例子 计算出一个人已经出生了多少天。 public static void function() throws Exception { System.out.println("请输入出生日期 格式 YYYY-MM-dd"); // 获取出生日期,键盘输入 String birthdayString = new Scanner(System.in).next(); // 将字符串日期,转成Date对象 // 创建SimpleDateFormat对象,写日期模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 调用方法parse,字符串转成日期对象 Date birthdayDate = sdf.parse(birthdayString); // 获取今天的日期对象 Date todayDate = new Date(); // 将两个日期转成毫秒值,Date类的方法getTime long birthdaySecond = birthdayDate.getTime(); long todaySecond = todayDate.getTime(); long secone = todaySecond-birthdaySecond; if (secone < 0){ System.out.println("还没出生呢"); } else { System.out.println(secone/1000/60/60/24); } } 主要文件上面是此次更新设计到的主要文件,感兴趣的同学可以自行查看。 🚀个人项目地址:englishlearningapp 😽作者:勇敢di牛牛 🚀个人项目地址:englishlearningapp 个人简介:有一年工作经验的大学生。 工作:汽车系统应用开发(阿里集团) 个人网站:牛牛の小窝 🚏独学而无友,则孤陋而寡闻 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |