当前位置:   article > 正文

程序员老黄历Java源码实现_老黄历源码js

老黄历源码js

今早起来,无聊之际把程序员老黄历用Java实现了一番。

原JS版地址:http://sandbox.runjs.cn/show/ydp3it7b/

尊重原作……哈哈哈(连备注都复制的人是不是很恶心的?)

代码如下:

  1. package com.test;
  2. /**
  3. * activities的枚举
  4. * @author Xiao
  5. *
  6. */
  7. public enum ActivitiesEnum {
  8. ACTIVITIES_1("写单元测试", "写单元测试将减少出错", "写单元测试会降低你的开发效率", false),
  9. ACTIVITIES_2("洗澡", "你几天没洗澡了?", "会把设计方面的灵感洗掉", true),
  10. ACTIVITIES_3("锻炼一下身体", "", "能量没消耗多少,吃得却更多", true),
  11. ACTIVITIES_4("抽烟", "抽烟有利于提神,增加思维敏捷", "除非你活够了,死得早点没关系", true),
  12. ACTIVITIES_5("白天上线", "今天白天上线是安全的", "可能导致灾难性后果", false),
  13. ACTIVITIES_6("重构", "代码质量得到提高", "你很有可能会陷入泥潭", false),
  14. ACTIVITIES_7("使用%t", "你看起来更有品位", "别人会觉得你在装逼", false),
  15. ACTIVITIES_8("跳槽", "该放手时就放手", "鉴于当前的经济形势,你的下一份工作未必比现在强", false),
  16. ACTIVITIES_9("招人", "你面前这位有成为牛人的潜质", "这人会写程序吗?", false),
  17. ACTIVITIES_10("面试", "面试官今天心情很好", "面试官不爽,会拿你出气", false),
  18. ACTIVITIES_11("提交辞职申请", "公司找到了一个比你更能干更便宜的家伙,巴不得你赶快滚蛋", "鉴于当前的经济形势,你的下一份工作未必比现在强", false),
  19. ACTIVITIES_12("申请加薪", "老板今天心情很好", "公司正在考虑裁员", false),
  20. ACTIVITIES_13("晚上加班", "晚上是程序员精神最好的时候", "", true),
  21. ACTIVITIES_14("在妹子面前吹牛", "改善你矮穷挫的形象", "会被识破", true),
  22. ACTIVITIES_15("撸管", "避免缓冲区溢出", "强撸灰飞烟灭", true),
  23. ACTIVITIES_16("浏览成人网站", "重拾对生活的信心", "你会心神不宁", true),
  24. ACTIVITIES_17("命名变量%v", "", "", false),
  25. ACTIVITIES_18("写超过%l行的方法", "你的代码组织的很好,长一点没关系", "你的代码将混乱不堪,你自己都看不懂", false),
  26. ACTIVITIES_19("提交代码", "遇到冲突的几率是最低的", "你遇到的一大堆冲突会让你觉得自己是不是时间穿越了", false),
  27. ACTIVITIES_20("代码复审", "发现重要问题的几率大大增加", "你什么问题都发现不了,白白浪费时间", false),
  28. ACTIVITIES_21("开会", "写代码之余放松一下打个盹,有益健康", "小心被扣屎盆子背黑锅", false),
  29. ACTIVITIES_22("打DOTA", "你将有如神助", "你会被虐的很惨", true),
  30. ACTIVITIES_23("晚上上线", "晚上是程序员精神最好的时候", "你白天已经筋疲力尽了", false),
  31. ACTIVITIES_24("修复BUG", "你今天对BUG的嗅觉大大提高", "新产生的BUG将比修复的更多", false),
  32. ACTIVITIES_25("设计评审", "设计评审会议将变成头脑风暴", "人人筋疲力尽,评审就这么过了", false),
  33. ACTIVITIES_26("需求评审", "", "", false),
  34. ACTIVITIES_27("上微博", "今天发生的事不能错过", "今天的微博充满负能量", true),
  35. ACTIVITIES_28("上AB站", "还需要理由吗?", "满屏兄贵亮瞎你的眼", true),
  36. ACTIVITIES_29("玩FlappyBird", "今天破纪录的几率很高", "除非你想玩到把手机砸了", true);
  37. private String name;
  38. private String good;
  39. private String bad;
  40. private Boolean weekend;
  41. ActivitiesEnum(String name, String good, String bad, Boolean weekend){
  42. this.setBad(bad);
  43. this.setGood(good);
  44. this.setName(name);
  45. this.setWeekend(weekend);
  46. }
  47. public String getName() {
  48. return name;
  49. }
  50. public void setName(String name) {
  51. this.name = name;
  52. }
  53. public String getGood() {
  54. return good;
  55. }
  56. public void setGood(String good) {
  57. this.good = good;
  58. }
  59. public String getBad() {
  60. return bad;
  61. }
  62. public void setBad(String bad) {
  63. this.bad = bad;
  64. }
  65. public Boolean getWeekend() {
  66. return weekend;
  67. }
  68. public void setWeekend(Boolean weekend) {
  69. this.weekend = weekend;
  70. }
  71. }


  1. package com.test;
  2. public enum SpecialsEnum {
  3. SPECIALS(2014, "bad", "待在男(女)友身边", "脱团火葬场,入团保平安。");
  4. private Integer date;
  5. private String type;
  6. private String name;
  7. private String description;
  8. SpecialsEnum (Integer date, String type, String name, String description){
  9. this.setDate(date);
  10. this.setType(type);
  11. this.setName(name);
  12. this.setDescription(description);
  13. }
  14. public Integer getDate() {
  15. return date;
  16. }
  17. public void setDate(Integer date) {
  18. this.date = date;
  19. }
  20. public String getType() {
  21. return type;
  22. }
  23. public void setType(String type) {
  24. this.type = type;
  25. }
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. public String getDescription() {
  33. return description;
  34. }
  35. public void setDescription(String description) {
  36. this.description = description;
  37. }
  38. }

  1. package com.test;
  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Locale;
  10. import java.util.Map;
  11. import java.util.Random;
  12. import org.apache.commons.lang.StringUtils;
  13. public class ProgrammerCalendar {
  14. private Integer iday = 0;
  15. private String [] weeks = new String[]{"日", "一","二","三","四","五","六"};
  16. private String [] directions = new String[]{"北方","东北方","东方","东南方","南方","西南方","西方","西北方"};
  17. private String [] tools = new String[]{"Eclipse写程序", "MSOffice写文档", "记事本写程序", "Windows8", "Linux", "MacOS", "IE", "Android设备", "iOS设备"};
  18. private String [] varNames = new String[]{"jieguo", "huodong", "pay", "expire", "zhangdan", "every", "free", "i1", "a", "virtual", "ad", "spider", "mima", "pass", "ui"};
  19. private String [] drinks = new String[]{"水","茶","红茶","绿茶","咖啡","奶茶","可乐","鲜奶","豆奶","果汁","果味汽水","苏打水","运动饮料","酸奶","酒"};
  20. public Integer getIday() {
  21. return iday;
  22. }
  23. public String[] getDirections() {
  24. return directions;
  25. }
  26. /*
  27. * 注意:本程序中的“随机”都是伪随机概念,以当前的天为种子。
  28. */
  29. public Integer random(Integer daySeed, Integer indexSeed) {
  30. Integer n = daySeed % 11117;
  31. for (int i = 0; i < 100 + indexSeed; i++) {
  32. n = n * n;
  33. n = n % 11117; //11117是个质数
  34. }
  35. return n;
  36. }
  37. public String getTodayString (){
  38. Calendar calendar = Calendar.getInstance();
  39. calendar.setTime(new Date());
  40. return "今天是" + calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH) + 1)
  41. + "月" + calendar.get(Calendar.DAY_OF_MONTH)
  42. + "日 星期" + weeks[calendar.get(Calendar.DAY_OF_WEEK) - 1];
  43. }
  44. public String star(Integer num) {
  45. String result = "";
  46. int i = 0;
  47. while (i < num) {
  48. result += "★";
  49. i++;
  50. }
  51. while(i < 5) {
  52. result += "☆";
  53. i++;
  54. }
  55. return result;
  56. }
  57. private Boolean isWeekend() {
  58. Locale.setDefault(Locale.CHINA);
  59. Calendar calendar = Calendar.getInstance();
  60. return calendar.get(Calendar.DAY_OF_WEEK) == 1 || calendar.get(Calendar.DAY_OF_WEEK) == 7;
  61. }
  62. public List<ActivitiesEnum> filter() {
  63. List<ActivitiesEnum> thisEnum = new ArrayList<ActivitiesEnum>();
  64. // 周末的话,只留下 weekend = true 的事件
  65. if(isWeekend()) {
  66. for (ActivitiesEnum e : ActivitiesEnum.values()) {
  67. if(e.getWeekend()){
  68. thisEnum.add(e);
  69. }
  70. }
  71. return thisEnum;
  72. }
  73. return new ArrayList<ActivitiesEnum>(Arrays.asList(ActivitiesEnum.values()));
  74. }
  75. public void pickTodaysLuck() {
  76. List<ActivitiesEnum> _activities = filter();
  77. Integer numGood = random(iday, 98) % 3 + 2;
  78. Integer numBad = random(iday, 87) % 3 + 2;
  79. List<Map<String, String>> eventArr = pickRandomActivity(_activities, numGood + numBad);
  80. Integer [] specialSize = pickSpecials();
  81. System.out.println("宜:");
  82. for (int i = 0; i < numGood; i++) {
  83. System.out.println(" " + eventArr.get(i).get("name") + (StringUtils.isNotBlank(eventArr.get(i).get("good")) ? ":" + eventArr.get(i).get("good") : ""));
  84. }
  85. System.out.println("不宜:");
  86. for (int i = 0; i < numBad; i++) {
  87. System.out.println(" " + eventArr.get(numGood + i).get("name") + (StringUtils.isNotBlank(eventArr.get(numGood + i).get("bad")) ? ":" + eventArr.get(numGood + i).get("bad") : ""));
  88. }
  89. }
  90. /**
  91. * 从数组中随机挑选 size 个
  92. * @param size
  93. * @return
  94. */
  95. private List<ActivitiesEnum> pickRandom(List<ActivitiesEnum> _activities, Integer size) {
  96. List<ActivitiesEnum> result = new ArrayList<ActivitiesEnum>();
  97. for (ActivitiesEnum ae : _activities) {
  98. result.add(ae);
  99. }
  100. for (int i = 0; i < _activities.size() - size; i++) {
  101. int index = random(iday, i) % result.size();
  102. result.remove(index);
  103. }
  104. return result;
  105. }
  106. /**
  107. * 从数组中随机挑选 size 个
  108. * @param size
  109. * @return
  110. */
  111. private List<String> pickRandomDrinks(Integer size) {
  112. List<String> result = new ArrayList<String>(Arrays.asList(drinks));
  113. for (int i = 0; i < drinks.length - size; i++) {
  114. int index = random(iday, i) % result.size();
  115. result.remove(index);
  116. }
  117. return result;
  118. }
  119. // 枚举 中随机挑选 size 个
  120. public List<Map<String, String>> pickRandomActivity(List<ActivitiesEnum> _activities, Integer size) {
  121. List<ActivitiesEnum> picked_events = pickRandom(_activities, size);
  122. List<Map<String, String>> mapList = new ArrayList<Map<String,String>>();
  123. for (int i = 0; i < picked_events.size(); i++) {
  124. mapList.add(parse(picked_events.get(i)));
  125. }
  126. return mapList;
  127. }
  128. /**
  129. * 解析占位符并替换成随机内容
  130. * @param ae
  131. * @return
  132. */
  133. public Map<String, String> parse(ActivitiesEnum ae) {
  134. Map<String, String> map = new HashMap<String, String>();
  135. map.put("name", ae.getName());
  136. map.put("good", ae.getGood());
  137. map.put("bad", ae.getBad());
  138. if(map.get("name").indexOf("%v") != -1) {
  139. map.put("name", map.get("name").replaceAll("%v", varNames[random(iday, 12) % varNames.length]));
  140. }
  141. if(map.get("name").indexOf("%t") != -1) {
  142. map.put("name", map.get("name").replaceAll("%t", tools[random(iday, 11) % tools.length]));
  143. }
  144. if(map.get("name").indexOf("%t") != -1) {
  145. map.put("name", map.get("name").replaceAll("%l", (random(iday, 12) % 247 + 30) + ""));
  146. }
  147. return map;
  148. }
  149. public Integer [] pickSpecials () {
  150. Integer [] specialSize = new Integer[]{0, 0};
  151. for (SpecialsEnum se : SpecialsEnum.values()) {
  152. if(iday == se.getDate()){
  153. if(se.getType().equals("good")){
  154. specialSize[0]++;
  155. }else{
  156. specialSize[1]++;
  157. }
  158. System.out.println("name:" + se.getName() + " description:" + se.getDescription());
  159. }
  160. }
  161. return specialSize;
  162. }
  163. public ProgrammerCalendar() {
  164. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  165. try {
  166. iday = Integer.parseInt(sdf.format(new Date()));
  167. } catch (Exception e) {
  168. e.printStackTrace();//懒得引用log了
  169. }
  170. }
  171. public static void main(String[] args) {
  172. ProgrammerCalendar hl = new ProgrammerCalendar();
  173. System.out.println("今天是:" + hl.getTodayString());
  174. System.out.println("座位朝向:面向" + hl.directions[hl.random(hl.getIday(), 2) % hl.getDirections().length] + "写程序,BUG 最少。");
  175. System.out.println("今日宜饮:" + StringUtils.join(hl.pickRandomDrinks(2), ","));
  176. System.out.println("女神亲近指数:" + hl.star(hl.random(hl.getIday(), 6) % 5 + 1));
  177. hl.pickTodaysLuck();
  178. }
  179. }

  1. 今天是:今天是2016年9月25日 星期日
  2. 座位朝向:面向西方写程序,BUG 最少。
  3. 今日宜饮:可乐,果汁
  4. 女神亲近指数:★★☆☆☆
  5. 宜:
  6. 锻炼一下身体
  7. 晚上加班:晚上是程序员精神最好的时候
  8. 浏览成人网站:重拾对生活的信心
  9. 不宜:
  10. 打DOTA:你会被虐的很惨
  11. 上AB站:满屏兄贵亮瞎你的眼


声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号