-
-
031502344 郑世强
-
031502220 李自强
-
-
GitHub链接: DepartmanAndStudent
-
数据生成原理.input_data
-
使用随机数方法生成,满足以下规则
-
每个学生的tags和free_time的个数和内容都是随机生成的,并且使用HashSet防止重复.部门的同理.
-
部门和学生的id都是有一定规则前缀加上随机数.例如,"03150XXX","D000XX"
-
-
-
数据建模及匹配程序的思路及实现方式
-
对象有两个Student和Department,类中的字段由示例json格式Format生成。
-
匹配采用分数优先制
-
首先学生与部门之间必须要有一个以上的活动时间匹配才可能被录取。
-
在满足上列条件下,由兴趣标签、双方活动时间和志愿顺序三个因素计算权值,并且这三个权值支持修改。
-
用Arraylist的sort方法,按照分数降序排列。
-
根据分数优先和不超过部门limit数量择优录取
-
-
-
代码规范
-
类名使用 UpperCamelCase 风格,遵从驼峰形式。
-
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
-
方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式
-
包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词```
-
public int timsIsMatch(Student student,Department department) { List<String> stuTimes=student.getFree_time(); List<String> depTimes=department.getEvent_schedules(); int score=0; for (String depTime:depTimes) { if (depTime.matches("\w*\.(\d*)\:(\d*)~(\d*):(\d*)")){ String weekName=depTime.replaceAll("(\w*)\.(.)*","$1"); int depStartHour = Integer .parseInt(depTime.replaceAll("\w*\.(\d*)\:(\d*)(.)*", "$1$2")); int depEndHour=Integer .parseInt(depTime.replaceAll(".*~(\d*):(\d*).*", "$1$2")); for (String stuTime : stuTimes) { String stuWeekName=stuTime .replaceAll("(\w*)\.(.)*","$1"); int stuStartHour = Integer .parseInt(stuTime.replaceAll("\w*\.(\d*)\:(\d*)(.)*", "$1$2")); int stuEndHour=Integer .parseInt(stuTime.replaceAll(".*~(\d*):(\d*).*", "$1$2")); if (stuWeekName.equals(weekName) && stuStartHour <= depStartHour && stuEndHour >= depEndHour) { score+=timePerScore; break; } } }else{ System.out.println("数据格式不正确!!!"); } } return score; }
-
-
结果评估
-
对于结果挺满意,也挺符合实际,部门之间能够匹配到相对最好的部员,但也有不足的地方,例如部员的空闲时间在多个部门之间重复冲突。
-
-
结对体验
-
因为之前有过和别人合作的经历,所以我会尽量避免合作过程中的一些问题,例如沟通,两个人在一起写代码,某些重要的方法和字段应该使用中文注释,让队友更好的读懂你的代码。
-
-