【Android】按照遗忘规律自动制定背单词计划功能的实现

您所在的位置:网站首页 艾宾浩斯背单词软件app 【Android】按照遗忘规律自动制定背单词计划功能的实现

【Android】按照遗忘规律自动制定背单词计划功能的实现

2024-05-31 09:56| 来源: 网络整理| 查看: 265

🚀🚀🚀🚀🚀🚀这是一个从零开始持续更新的项目,所有涉及到的关键点都在专栏里,目前还没有开发完成,本文中所有的代码都已上传,是可以免费看的,项目地址本文最后。

内容概述

人们在记忆单词的时候会呈现出一定的遗忘规律,所以对于陌生的单词,根据记忆的情况,进行间断性的复习是非常有必要的。               

                         艾宾浩斯遗忘曲线                                                                                                                                                                                                                                                                                                                       

      上图是著名的艾宾浩斯遗忘曲线,从图中可以看出,在记忆后的两天内会遗忘百分之八十,所以在两天内进行及时进行复习是十分重要的。利用上图曲线所展现的规律,阶段性的进行复习才能,保证单词记忆的牢固性。

 

单个单词学习流程

      如上图所示,每一个单词在一开始都会根据用户提供的计划加入一个时间戳,每次用户打开软件需要学习的时候,都会在本地单词库中筛选出到达计划时间的单词,加入用户有一天没有学习,那么在给出要学习单词列表的时候,也会将本应该出现在昨天的单词也补上,这样有效保证用户能够按照计划完成整个词书的背诵任务。使用时间戳的形式存储日期,可以方便快捷地进行日期的计算与比较。

      这里待学习的单词由三部分组成:

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类的静态常量。二、静态常量...https://blog.csdn.net/weixin_42472040/article/details/100108434

SimpleDateFormat

在java中我们一般用text包中的SimpleDateFormat来格式化时间,这个类在对时间的处理上可以算是专业选手。向上追根,SimpleDateFormat类继承于DateFormat,DateFormat继承于Format。Format提供了很多对信息,数字,日期等等内容的格式化,我们这次主要看一下SimpleDateFormat的格式化方法。另外不能忽视的是,SimpleDateFormat除了格式化,还具有解析一个String变为Date的功能。

Date

java.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