Java实现的程序员老黄历的全过程代码

  • 时间:
  • 4409人关注

这篇文章主要介绍了Java实现的程序员老黄历实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,另外这篇文章主要知识点是关于java、程序员、老黄历、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

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

原JS版地址:程序员老黄历

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

代码如下:

代码段1

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

代码段2

package com.test; 
public enum SpecialsEnum { 
 SPECIALS(2014, "bad", "待在男(女)友身边", "脱团火葬场,入团保平安。"); 
 private Integer date; 
 private String type; 
 private String name; 
 private String description; 
 SpecialsEnum (Integer date, String type, String name, String description){ 
 this.setDate(date); 
 this.setType(type); 
 this.setName(name); 
 this.setDescription(description); 
 } 
 public Integer getDate() { 
 return date; 
 } 
 public void setDate(Integer date) { 
 this.date = date; 
 } 
 public String getType() { 
 return type; 
 } 
 public void setType(String type) { 
 this.type = type; 
 } 
 public String getName() { 
 return name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 
 public String getDescription() { 
 return description; 
 } 
 public void setDescription(String description) { 
 this.description = description; 
 } 
} 

代码段3

package com.test; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Locale; 
import java.util.Map; 
import java.util.Random; 
import org.apache.commons.lang.StringUtils; 
public class ProgrammerCalendar { 
 private Integer iday = 0; 
 private String [] weeks = new String[]{"日", "一","二","三","四","五","六"}; 
 private String [] directions = new String[]{"北方","东北方","东方","东南方","南方","西南方","西方","西北方"}; 
 private String [] tools = new String[]{"Eclipse写程序", "MSOffice写文档", "记事本写程序", "Windows8", "Linux", "MacOS", "IE", "Android设备", "iOS设备"}; 
 private String [] varNames = new String[]{"jieguo", "huodong", "pay", "expire", "zhangdan", "every", "free", "i1", "a", "virtual", "ad", "spider", "mima", "pass", "ui"}; 
 private String [] drinks = new String[]{"水","茶","红茶","绿茶","咖啡","奶茶","可乐","鲜奶","豆奶","果汁","果味汽水","苏打水","运动饮料","酸奶","酒"}; 
 public Integer getIday() { 
 return iday; 
 } 
 public String[] getDirections() { 
 return directions; 
 }

/** 
 * 注意:本程序中的“随机”都是伪随机概念,以当前的天为种子。 
 */ 
 
 public Integer random(Integer daySeed, Integer indexSeed) { 
 Integer n = daySeed % 11117; 
 for (int i = 0; i < 100 + indexSeed; i++) { 
 n = n * n; 
 n = n % 11117; //11117是个质数 
 } 
 return n; 
 } 
 public String getTodayString (){ 
 Calendar calendar = Calendar.getInstance(); 
 calendar.setTime(new Date()); 
 return "今天是" + calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH) + 1) 
 + "月" + calendar.get(Calendar.DAY_OF_MONTH) 
 + "日 星期" + weeks[calendar.get(Calendar.DAY_OF_WEEK) - 1]; 
 } 
 public String star(Integer num) { 
 String result = ""; 
 int i = 0; 
 while (i < num) { 
 result += "★"; 
 i++; 
 } 
 while(i < 5) { 
 result += "☆"; 
 i++; 
 } 
 return result; 
 } 
 private Boolean isWeekend() { 
 Locale.setDefault(Locale.CHINA); 
 Calendar calendar = Calendar.getInstance(); 
 return calendar.get(Calendar.DAY_OF_WEEK) == 1 || calendar.get(Calendar.DAY_OF_WEEK) == 7; 
 } 
 public List<ActivitiesEnum> filter() { 
 List<ActivitiesEnum> thisEnum = new ArrayList<ActivitiesEnum>(); 
 // 周末的话,只留下 weekend = true 的事件 
 if(isWeekend()) { 
 for (ActivitiesEnum e : ActivitiesEnum.values()) { 
 if(e.getWeekend()){ 
 thisEnum.add(e); 
 } 
 } 
 return thisEnum; 
 } 
 return new ArrayList<ActivitiesEnum>(Arrays.asList(ActivitiesEnum.values())); 
 } 
 public void pickTodaysLuck() { 
 List<ActivitiesEnum> _activities = filter(); 
 Integer numGood = random(iday, 98) % 3 + 2; 
 Integer numBad = random(iday, 87) % 3 + 2; 
 List<Map<String, String>> eventArr = pickRandomActivity(_activities, numGood + numBad); 
 Integer [] specialSize = pickSpecials(); 
 System.out.println("宜:"); 
 for (int i = 0; i < numGood; i++) { 
 System.out.println(" " + eventArr.get(i).get("name") + (StringUtils.isNotBlank(eventArr.get(i).get("good")) ? ":" + eventArr.get(i).get("good") : "")); 
 } 
 System.out.println("不宜:"); 
 for (int i = 0; i < numBad; i++) { 
 System.out.println(" " + eventArr.get(numGood + i).get("name") + (StringUtils.isNotBlank(eventArr.get(numGood + i).get("bad")) ? ":" + eventArr.get(numGood + i).get("bad") : "")); 
 } 
 } 
 /** 
 * 从数组中随机挑选 size 个 
 * @param size 
 * @return 
 */ 
 private List<ActivitiesEnum> pickRandom(List<ActivitiesEnum> _activities, Integer size) { 
 List<ActivitiesEnum> result = new ArrayList<ActivitiesEnum>(); 
 for (ActivitiesEnum ae : _activities) { 
 result.add(ae); 
 } 
 for (int i = 0; i < _activities.size() - size; i++) { 
 int index = random(iday, i) % result.size(); 
 result.remove(index); 
 } 
 return result; 
 } 
 /** 
 * 从数组中随机挑选 size 个 
 * @param size 
 * @return 
 */ 
 private List<String> pickRandomDrinks(Integer size) { 
 List<String> result = new ArrayList<String>(Arrays.asList(drinks)); 
 for (int i = 0; i < drinks.length - size; i++) { 
 int index = random(iday, i) % result.size(); 
 result.remove(index); 
 } 
 return result; 
 } 
 // 枚举 中随机挑选 size 个 
 public List<Map<String, String>> pickRandomActivity(List<ActivitiesEnum> _activities, Integer size) { 
 List<ActivitiesEnum> picked_events = pickRandom(_activities, size); 
 List<Map<String, String>> mapList = new ArrayList<Map<String,String>>(); 
 for (int i = 0; i < picked_events.size(); i++) { 
 mapList.add(parse(picked_events.get(i))); 
 } 
 return mapList; 
 } 
 /** 
 * 解析占位符并替换成随机内容 
 * @param ae 
 * @return 
 */ 
 public Map<String, String> parse(ActivitiesEnum ae) { 
 Map<String, String> map = new HashMap<String, String>(); 
 map.put("name", ae.getName()); 
 map.put("good", ae.getGood()); 
 map.put("bad", ae.getBad()); 
 if(map.get("name").indexOf("%v") != -1) { 
 map.put("name", map.get("name").replaceAll("%v", varNames[random(iday, 12) % varNames.length])); 
 } 
 if(map.get("name").indexOf("%t") != -1) { 
 map.put("name", map.get("name").replaceAll("%t", tools[random(iday, 11) % tools.length])); 
 } 
 if(map.get("name").indexOf("%t") != -1) { 
 map.put("name", map.get("name").replaceAll("%l", (random(iday, 12) % 247 + 30) + "")); 
 } 
 return map; 
 } 
 public Integer [] pickSpecials () { 
 Integer [] specialSize = new Integer[]{0, 0}; 
 for (SpecialsEnum se : SpecialsEnum.values()) { 
 if(iday == se.getDate()){ 
 if(se.getType().equals("good")){ 
 specialSize[0]++; 
 }else{ 
 specialSize[1]++; 
 } 
 System.out.println("name:" + se.getName() + " description:" + se.getDescription()); 
 } 
 } 
 return specialSize; 
 } 
 public ProgrammerCalendar() { 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
 try { 
 iday = Integer.parseInt(sdf.format(new Date())); 
 } catch (Exception e) { 
 e.printStackTrace();//懒得引用log了 
 } 
 } 
 public static void main(String[] args) { 
 ProgrammerCalendar hl = new ProgrammerCalendar(); 
 System.out.println("今天是:" + hl.getTodayString()); 
 System.out.println("座位朝向:面向" + hl.directions[hl.random(hl.getIday(), 2) % hl.getDirections().length] + "写程序,BUG 最少。"); 
 System.out.println("今日宜饮:" + StringUtils.join(hl.pickRandomDrinks(2), ",")); 
 System.out.println("女神亲近指数:" + hl.star(hl.random(hl.getIday(), 6) % 5 + 1)); 
 hl.pickTodaysLuck(); 
 } 
} 

运行结果: 

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对码农之家的支持。


上一篇:介绍idea远程调试spark的方法步骤

下一篇:IDEA常用插件总结推荐

相关内容

  • 如何用Java实现将容器 Map中的内容保存到数组

    这篇文章主要介绍了Java实现将容器 Map中的内容保存到数组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    05-03Java Map内容保存数组

    阅读更多
  • 如何让java程序运行

    04-29java程序运行

    阅读更多
  • java是如何输出的

    04-29java输出的方式

    阅读更多
  • java如何调用接口

    其实对于java调用接口进行获取对方服务器的数据在开发中特别常见,然而一些常用的基础的知识总是掌握不牢,让人容易忘记,写下来闲的时候看看,比回想总会好一些。 总体而言,一些东西知识点一直复制粘贴容易依赖,重要的是会忘记为什么这么写,只有理解到位,或者八九不离十才可以对于随时变化的情况进行分析,如果到家,还可以对别人或自己的进行优化。 如果你在这篇没有找到你想要的,请点击:java如何调用接口方式二 而对于一些知识

    04-27java调用接口的方法

    阅读更多
  • java如何定义数组

    Java中数组定义的三种方式 1.先声明 2.分配空间 3.赋值 public class arr{ public static void main(String[] args){ int[] arr; //先声明 arr=new int[5]; //分配空间 for(int i=0;i5;i++)arr[i]=i*10; //赋值 for(int i=0;i5;i++){ System.out.println(arr[+i+]=+arr[i]); } }} 结果: 方法二: 1.声明并分配空间 2.赋值

    04-27java定义数组方法

    阅读更多
  • 黑马程序员java面试宝典Beta6.0

    黑马程序员java面试宝典Beta6.0

    黑马老师整理的比较全的面试宝典,你面试会提到的技术问题都在这里,有这一本就够了,感兴趣的可以了解一下

    大小:9.83 MBjava面试

    点击下载
  • Java9模块化开发核心原则与实践

    Java9模块化开发核心原则与实践

    大小:112.3 MBJava9

    点击下载
  • Java工程师修炼之道

    Java工程师修炼之道

    本书主要针对一名合格的Java工程师的必备技能做了大纲性的总结和阐述。

    大小:87.17 MBJava

    点击下载
  • Java JDK8 学习笔记

    Java JDK8 学习笔记

    本书针对Java SE 8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新,详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对照关系,从Java SE API的源代码分析,了解各种语法在Java SE API中的具体应用

    大小:92.3 MBJava

    点击下载
  • 实战Java高并发程序设计

    实战Java高并发程序设计

    并发和多线程经典图书升级版,详解Java高并发程序设计基础、思路、方法和实战,技术提升走向高级工程师必备。

    大小:104.1 MBJava

    点击下载
  • Java核心技术:卷I 基础知识

    Java核心技术:卷I 基础知识

    大小:44.4 MBJava

    点击下载

学习笔记

18小时51分钟前回答

如何实现Java日期时间格式转换

Java日期时间,以及相互转化,供大家参考,具体内容如下 package com.study.string;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class DateBase { public static void main(String[] args) throws ParseException { /* * 获得当前时间 */ Date date1 = new Date(); long long1 = date1.getTime();//date类型,转为 long类型 System.out.println(date1);//Sat Aug 26 08:36:36 GMT+08:00 2017 System.out.println(long1);//1503708031359 Calendar cale1 = Calendar.getInstance(); date1 = cale1.getTime();//calendar 类型 转为 date类型 long1 = date1.getTime(); System.out.println(cale1); System.out.println(date1);//Sat Aug 26 08:36:36 GMT+08:00 2017 System.out.println(long1); ……

10小时5分钟前回答

java8、jdk8日期与字符串转化

java8、jdk8日期转化成字符串 新建日期工具类:DateUtils 新建方法:parseDate 实现方法parseDate public static String parseDate(LocalDate localDate,String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); return localDate.format(dateTimeFormatter); } 在main方法编写测试: public static void main(String[] args) { System.out.print(parseDate(LocalDate.now(),yyyy-MM-dd)); } 这个工具类代码如下: package com.gwolf;import java.time.LocalDate;import java.time.format.DateTimeFormatter;public class DateUtils { public static String parseDate(LocalDate localDate,String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); return localDate.format(dateTimeFormatter); } public static void main(Stri……

39小时37分钟前回答

实例详解Java日志相关技术_动力节点Java学院整理

Java日志相关技术 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug;在运行维护阶段,日志系统又可以帮我们记录大部分的异常信息,从而帮助我们更好的完善系统。本文要来分享一些Java程序员最常用的Java日志框架组件。 1、log4j 最受欢迎的Java日志组件 Log4j是一款基于Java的开源日志组件,Log4j功能非常强大,我们可以将日志信息输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。更值得一提的是,Log4j可以允许你非常……

24小时48分钟前回答

JavaScript时间戳与时间日期间相互转换示例代码

今天在工作中要将获取到的时间转换为时间戳,一时间竟不知道怎么用,于是不得不去查询资料,这里特地做个笔记。 1、将日期转换为时间戳。 要将日期转换为时间戳,首先得先获取到日期,这里可以直接指定日期,或者是使用当前日期。要获取当前日期,我们可以使用new Date()来获取。直接上代码。 // (1)、将当前日期转换为时间戳。 var now = new Date(); console.log(now.getTime()) // 将当前日期转换为时间戳,getTime()方法可返回距1970年1月1日之间的毫秒数。// (2)、将指定日期转换为时间戳。 var t = 2017-12-08 20:5:30; // 月、日、时、分、秒如果不满两位数可不带0. var T = new Date(t); // 将指定日期转换为标准日期格式。……

6小时44分钟前回答

javascript完美实现给定日期返回上月日期代码详解

本文实例讲述了javascript完美实现给定日期返回上月日期的方法。分享给大家供大家参考,具体如下: 在项目开发中,使用javascript对日期进行处理时,因为在查询中都会有一个初始值,大多都会在当前日期的基础上推一个月,在这种情况下,如果自己写一个,需要考虑的情况较多,在这里给大家分享一下一个比较完善的解决这个问题的方法。供大家参考。例如:给定截止日期enddate=2010-07-31 计算得到开始日期startdate=2010-06-30 这个问题的关键在于对以下几处的考虑: 1、startdate跨年 2、startdate是2月(需考虑闰年的情况) 3、大小月 htmlscript type=text/javascriptfunction getInitStartDate(enddate) { var comp = enddate.split(-); var y……

39小时38分钟前回答

JavaScript输出所选择起始与结束日期的实例代码

本文实例讲述了JavaScript输出所选择起始与结束日期的方法。分享给大家供大家参考,具体如下: 一直在用公司的报表工具做报表,报表里最常用的查询条件就是开始日期、结束日期。 自己会一点html和js,于是就想用html+JavaScript来实现选择查询日期,以及做出相应。 实现之后,觉得这个还是比较简单的,N年前学的html和javascript,总算是派上用场了,人人都可以开发网页。 这个代码要在谷歌的chrome浏览器中,日期选择才能有效果 ( 代码中的input元素Type属性值date为HTML5元素,需要支持HTML5的浏览器运行 ) 代码如下: !DOCTYPE HTMLhtmlhead meta http-equiv=content-type content=charset=gbk/meta script type=text/javascript function quer……

13小时11分钟前回答

JavaWeb项目FullCalendar日历插件实例用法

本文介绍了JavaWeb项目FullCalendar日历插件使用的示例代码,分享给大家,具体如下: 使用FullCalendar需要引用的文件 1.css文件 2.js文件 link href=${base}/assets/global/plugins/fullcalendar/fullcalendar.min.css rel=external nofollow rel=stylesheet type=text/css /script src=${base}/assets/global/plugins/fullcalendar/fullcalendar.min.js type=text/javascript/script 生成日历主界面 FullCalendar里有个events属性,可以从数据库查询数据动态添加事项 events: function(start,end,timezone, callback) { //当前日期 var date = this.getDate().format(YYYY-MM-DD); $.ajax({ url: ctx + /teach/attend-getCalendarEventsByClazzId.do, dataType: json, data: { calendarClazzId : function(){ return calendarClazzId; }, date : date }, success: function(res……