最近我的朋友时间刺客——罗老师,说他有太多的学习,忙不过来。为了让我的朋友可以优化自己的时间,我就写了几行代码,来帮助他做一些事。
首先,我们都知道学习是有遗忘曲线的,那么我们就要按照遗忘曲线的模式构造一个方法出来
但是我不可能构造出完美的曲线,于是就用了近似的直线代替,当你输入一个时间差,它就会返回一个评估,我在这里称之为复习度
private double Ebbinghaus(int period){
if (period <= 20) {
return -2.1 * period + 100;
} else if (period <= 60) {
return -0.35 * period + 65;
} else if (period <= 540) {
return -0.021 * period + 45.3;
} else {
return 18144 / period;
}
}
完成了这个东西之后,我知道朋友的学习是有大量的事情的,所以,我就要用一种存储结构来存储它,在这里我使用了Map
//map<事件,复习度> map2<事件, {year,month,day,hour,min,时间差}>
private Map<String,Double> map = new HashMap<String,Double>();
private Map<String,int[]> map2 = new HashMap<String,int[]>();
map存放事件和复习度,map2存放事件,时间差
既然都做到这里了,那么我肯定要有增加事件的方法,于是我就写好了,第一次增加该事件的时候,如果map里面没有该事件,那么就可以放置该事件,并且事件的复习度是0.0。当然,有了该事件,复习度也是0.0,这样我的朋友就能愉快的增加自己即将要做的事情
//增加事件,和初始时间
public void add(String incident,int year,int month,int day,int hour,int min) {
int[] timetemp = {year,month,day,hour,min,0};
if(!map2.containsKey(incident)) {
map2.put(incident,timetemp);
map.put(incident, 0.0);
}else{
map2.put(incident,period(incident,year,month,day,hour,min));
map.put(incident, 0.0);
}
}
那么既然都放置了事件,肯定有计算时间差的方法,在这里我写了两个方法,来计算两次学习的时间差
我用一个数组,存放当前更新的年,月,日,小时,分钟,然后用最后一个元素存放时间差。为了防止时间差被刷新,所以要提前计算,为了代码的美洁,我还写了个timeperiod方法,用来计算时间。
//计算时间差(输入,事件、年、月、日、时、分)
private int[] period(String incident,int year,int month,int day,int hour,int min) {
int[] temp = map2.get(incident);
temp[5] = timeperiod(temp,year,month,day,hour,min);
temp[0] = year;
temp[1] = month;
temp[2] = day;
temp[3] = hour;
temp[4] = min;
return temp;
}
//计算两天的时间差,单位:分钟(并不完全精确)
private int timeperiod(int temp[],int year,int month,int day,int hour,int min) {
return (year-temp[0])*365*24*60+(month-temp[1])*30*24*60+(day-temp[2])*24*60+(hour-temp[3])*60+(min-temp[4]);
}
当然我们会对朋友的学习行为进行一些赞扬,来鼓励他好好学习,从而成为真正的时间管理带师
我们可以对他的复习度来进行评估,当他的复习度很高,我们会让他不要自满,还是要好好学习,当他的复习度过低,我们会鼓励他不要玩物丧志,要好好学习。这样才能成为时间管理带师。
//表扬用户
private String admire(double score) {
if(score<=20) {
return "能不能认真点学习,你个废物!";
}else if(score<=40) {
return "你这个分数,让我很难夸你啊!";
}else if(score<=60) {
return "就这,能不能好好学习";
}else if(score<=80) {
return "学成这样也叫学习?";
}else if(score<=100) {
return "能不能多学点,能学死咋地!";
}
return "SB";
}
既然到了这里,也到了我们最后一步,复习,我们利用已有的方法,当我的朋友复习的时候,就会输出复习之前的复习度,复习之后的复习度,更重要的是还有鼓励性的话语鞭策朋友
//复习事件
public void review(String incident,int year,int month,int day,int hour,int min) {
double temp = map.get(incident);
map2.put(incident,period(incident,year,month,day,hour,min));
map.put(incident, Ebbinghaus(map2.get(incident)[5])+10);
if(map.get(incident)>=100) {
map.put(incident, 100.0);
}
System.out.println("您复习了"+incident+" 最后一次学习时复习度是"+temp+"% "+"今日复习后复习度是:"+map.get(incident)+"%"+" 复习时间 是:"+year+"年"+month+"月"+day+"日"+hour+"时"+min+"分");
System.out.println("表扬语录:"+admire(map.get(incident)));
System.out.println("*********************************************************************************************");
}
主方法调用
public static void main(String[] args) {
Memory m = new Memory();
String Chinese = "语文";
String Math = "数学";
m.add(Chinese,2020,8,14,14,59);
m.review(Chinese, 2020, 8, 14, 15, 20);
m.review(Chinese, 2020, 8, 14, 20, 20);
m.review(Chinese, 2020, 8, 20, 15, 20);
m.add(Math,2020,8,14,14,59);
m.review(Math, 2020, 8, 15, 15, 20);
m.review(Math, 2020, 9, 14, 20, 20);
m.review(Math, 2021, 8, 20, 15, 20);
}
结果,怎么样,是不是能很快的提升自己的学习速度
您复习了语文 最后一次学习时复习度是0.0% 今日复习后复习度是:67.65% 复习时间 是:2020年8月14日15时20分
表扬语录:学成这样也叫学习?
*********************************************************************************************
您复习了语文 最后一次学习时复习度是67.65% 今日复习后复习度是:49.0% 复习时间 是:2020年8月14日20时20分
表扬语录:就这,能不能好好学习
*********************************************************************************************
您复习了语文 最后一次学习时复习度是49.0% 今日复习后复习度是:12.0% 复习时间 是:2020年8月20日15时20分
表扬语录:能不能认真点学习,你个废物!
*********************************************************************************************
您复习了数学 最后一次学习时复习度是0.0% 今日复习后复习度是:22.0% 复习时间 是:2020年8月15日15时20分
表扬语录:你这个分数,让我很难夸你啊!
*********************************************************************************************
您复习了数学 最后一次学习时复习度是22.0% 今日复习后复习度是:10.0% 复习时间 是:2020年9月14日20时20分
表扬语录:能不能认真点学习,你个废物!
*********************************************************************************************
您复习了数学 最后一次学习时复习度是10.0% 今日复习后复习度是:10.0% 复习时间 是:2021年8月20日15时20分
表扬语录:能不能认真点学习,你个废物!
*********************************************************************************************