今天咱们要写一个日历表,用以存储全部的节假日。java
虽然这个表设计的并非很妙。可是将就着继续了。程序员
让小弟把该表数据初始化3-5年的,结果一上午尚未出来,着急了,本身写了一个初始化的工具。编程
分享出来。app
1 import java.util.Calendar; 2 3 4 public class CalendarApp { 5 6 7 String [] holidays = new String[]{"2013-10-01","2013-10-02","2013-10-03","2013-10-04", "2014-10-01","2014-10-02","2014-10-03","2014-10-04"}; 8 String [] workdays = new String[]{"2013-09-30"}; 9 10 public boolean isHoliday(int year, int month, int day) { 11 String date = padding(year,4) +"-"+ padding((month+1), 2) +"-" + padding(day, 2); 12 for (String d : holidays) { 13 if(d.equals(date)) { 14 return true; 15 } 16 } 17 return false; 18 } 19 20 private String padding(int number, int length) { 21 String text = String.valueOf(number); 22 for (int i = length ; i > text.length(); i--) { 23 text = "0" + text; 24 } 25 return text; 26 } 27 28 public boolean isWorkDay(int year, int month, int day) { 29 String date = padding(year,4) +"-"+ padding((month+1), 2) +"-" + padding(day, 2); 30 for (String d : workdays) { 31 if(d.equals(date)) { 32 return true; 33 } 34 } 35 return false; 36 } 37 38 public boolean isWeekend(int year, int month, int day) { 39 Calendar cal = Calendar.getInstance(); 40 cal.set(Calendar.YEAR, year); 41 cal.set(Calendar.MONTH, month); 42 cal.set(Calendar.DATE, day); 43 int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); 44 return dayOfWeek > 4; 45 } 46 47 private boolean isDate(int year, int month, int day) { 48 Calendar cal = Calendar.getInstance(); 49 cal.set(Calendar.YEAR, year); 50 cal.set(Calendar.MONTH, month); 51 cal.set(Calendar.DATE, day); 52 int y = cal.get(Calendar.YEAR); 53 int m = cal.get(Calendar.MONTH); 54 int d = cal.get(Calendar.DATE); 55 return year == y && month == m && day == d; 56 } 57 58 public boolean calc(int year, int month, int day) { 59 String date = padding(year,4) +"-"+ padding((month+1), 2) +"-" + padding(day, 2); 60 System.out.println(date); 61 if(isWeekend(year, month, day) ){ 62 if(isWorkDay(year, month, day)){ 63 return false; 64 } 65 return true; 66 } else { 67 if(isHoliday(year, month, day) ){ 68 return true; 69 } 70 return false; 71 } 72 } 73 74 public static void main(String[] args) { 75 CalendarApp app = new CalendarApp(); 76 for (int year = 2013; year < 2016; year ++) { 77 for (int month = 9;month<10;month++) { 78 for (int day=1; day<32;day++) { 79 if (app.isDate(year,month, day)) { 80 boolean vacation = app.calc(year, month, day); 81 CompanyCalendar comCal = new CompanyCalendar(year, month, day, vacation); 82 comCal.save(); 83 } 84 } 85 } 86 } 87 } 88 }
这段代码大概用了20分钟写完的。工具
可是好几我的在写这个功能的时候用的时间都要远远长于这个时间。测试
那么咱们就来分析一下为何你们写代码会慢。网站
1. 整理思路搜索引擎
有这样一种工做方式:在写代码以前先要整理思路,在纸上描来画去,当思路清晰以后才开始写代码。编码
这个思考的过程占去了一部分时间。spa
(难道这个时间能够节省吗?慢慢来,往下看。)
2. 敲击键盘的方法
不熟悉键盘,不熟悉IDE,都是效率的杀手。写的时候还要本身输入Tab或者空格来对齐。
这些都会形成时间的浪费。
(这也太狗血了吧。不过的确很现实)
3. 不熟悉API
因为对于API的熟悉程度不够,有些东西要从新发明轮子,有些东西要绕弯路,这些也是时间浪费的元凶之一。
(这个的确是,可是这个得靠经验吧。嗯,差很少是这样,可是能够问啊。)
时间飞逝。
4. 方法老是在变
思路不固定,写的时候发现,这儿很差,那儿不行,这里要改进,那里要完善,因而,在反反复复中度过了不少时间。
(那发现错了还不改吗?得改,可是别改来改去又改回来,犹豫是大敌)
犹豫来犹豫去,时间就没了。
5. 寻找捷径
有些时候回想,会不会有捷径可以完成这个任务呢,也许真的有,可是若是知道有,立刻能够用那就用。
若是不知道,或者须要查好久,那么何不先直接写下来一个比较笨的,而后再改进呢?
寻找捷径的时间比正常笨办法走过去的时间还要长。
6. 不会用搜索引擎
(别搞笑了,写代码,和搜索引擎有什么关系?)
哇哦,那你不会的时候怎么办?是否是要搜索。(哦)
但是你输入的是什么关键词?你获得的答案有多少是可用的,又有多少页面给出了答案了呢?
宝贵的时间就在低效的搜索中度过了。
7. 不会Debug
不会Debug,断点设置了一大堆,可是没有几个是有用的,结果每次执行都要被打断,打断再打断。
还不如插个Log快呢。
时间就这么滑过去了。
8. 不会用测试
不会测试,采用System.out.println而后肉眼观察。
其实,JUnit一个TestCase可能就搞定了。
并且在跟踪的时候不会用Log,输出的内容老是不在点上。
不少时间就不过去了。
宝贵的时间就这么流逝了。
这就是你写代码变慢的几个常见的缘由。
那么怎么解决呢? 好的,咱们来看看怎么才可以加快写代码的速度。
1. 去掉纸上设计
纸上设计的最大问题在于,你没办法校验设计的正确性。即便UML工具也没办法告诉你可能出现编译错误、逻辑错误。
那怎么办?答案就是去掉纸上设计。难道一点设计都没有写代码可以可靠吗?
那若是你听过极限编程(XP)那你就必定会知道,有那么一小撮人,写代码真的没有设计。
没有设计听起来天方夜谭。实际上并非没有设计,而是进行最简单的设计,简单的模型,就开始编码,让IDE告诉程序员,
哪一个地方编译不经过,哪一个地方逻辑复杂度偏高,哪里会出现重复...
而后利用重构工具,将这些代码一一改过来。
逐步的就造成了正确的设计,这就是演进式设计。因为直接写的是能够工做的代码,因此,节省了大量的时间。
2. 熟记快捷键,利用IDE特性
IDE会帮助你格式化代码,无需一个个的Tab去敲。
IDE会帮助你重构,而无需用检索 -> 替换,那有可能让你替换了不应替换的代码。
IDE会帮你快速定位代码,而不须要连续按动上下箭头,或者是拉动滚动条。
.一下就会告诉你这个对象能够有哪些变量供访问,哪些方法供调用。
3. 熟记经常使用API
经常使用的API须要熟记,这样才可以信手拈来。
好比,如何从一堆数据中过滤出来符合条件的数据,多是采用lambda表达式最好。
若是没法用lambda表达式,那么试试CollectionUtils。
从新发明轮子可能不只仅是形成时间浪费,有时候还会引入Bug。
4. 学会用搜索引擎
当你想要寻找捷径的时候,问问搜索引擎。
固然你得学会如何利用关键词提升搜索出答案的几率。你也得了解哪些网站会给你正确的答案,而哪些网站,问了也不会有下文。
最好的搜索引擎恐怕就是你的QQ群,微博上关注的某几个高手。可是高手未必有时间来回答你的问题,因此你可能会感到很差意思。
那么,一次生两次熟,问问高手如何思考,如何搜索,你就会逐步的学会。
不耻下问,上问也没必要羞。
5. 改变思路,另辟蹊径
也许一个Java问题困惑了你很长时间,可是SQL可能立刻就能够解决。
也许一个List须要很长的循环才能搞定的事情,Map只须要3-5行。
6. 中止Debug
我不多见到人用Debug工具很高效的。采用Debug Log,它不会让你的程序断,也不会让你在大脑里记忆不少东西。
它很连贯,可是要善于写Log。
7. Test Automation
毋庸置疑,若是写完了代码有一个事物会告诉你正确了——那它必定是自动测试工具。
写测试吧。磨刀不误砍柴工。