时间管理大师1.0(Java)

最近我的朋友时间刺客——罗老师,说他有太多的学习,忙不过来。为了让我的朋友可以优化自己的时间,我就写了几行代码,来帮助他做一些事。

首先,我们都知道学习是有遗忘曲线的,那么我们就要按照遗忘曲线的模式构造一个方法出来
遗忘曲线
但是我不可能构造出完美的曲线,于是就用了近似的直线代替,当你输入一个时间差,它就会返回一个评估,我在这里称之为复习度

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%   复习时间 是:20208141520分
表扬语录:学成这样也叫学习?
*********************************************************************************************
您复习了语文  最后一次学习时复习度是67.65%  今日复习后复习度是:49.0%   复习时间 是:20208142020分
表扬语录:就这,能不能好好学习
*********************************************************************************************
您复习了语文  最后一次学习时复习度是49.0%  今日复习后复习度是:12.0%   复习时间 是:20208201520分
表扬语录:能不能认真点学习,你个废物!
*********************************************************************************************
您复习了数学  最后一次学习时复习度是0.0%  今日复习后复习度是:22.0%   复习时间 是:20208151520分
表扬语录:你这个分数,让我很难夸你啊!
*********************************************************************************************
您复习了数学  最后一次学习时复习度是22.0%  今日复习后复习度是:10.0%   复习时间 是:20209142020分
表扬语录:能不能认真点学习,你个废物!
*********************************************************************************************
您复习了数学  最后一次学习时复习度是10.0%  今日复习后复习度是:10.0%   复习时间 是:20218201520分
表扬语录:能不能认真点学习,你个废物!
*********************************************************************************************

参考文献

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值