出现问题:
每次只能保存一位用户信息,后面输入用户信息前面的用户信息会被覆盖
出现原因及解决方法:
因为暂存的temp对象被定义为全局变量,所以每次进去都被刷新为新对象,将其
User temp = new User(); 放在方法内即可,
空指针异常问题:
java.lang.NullPointerException
at java.util.Calendar.setTime(Calendar.java:1770)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:943)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936)
at java.text.DateFormat.format(DateFormat.java:345)
at Project.campusparttimejobversions4.view.JobView.applyJobForYourself(JobView.java:301)
at Project.campusparttimejobversions4.view.JobView.partTimeJobApplication(JobView.java:132)
at Project.campusparttimejobversions4.view.IndexView.softwareMainMenu(IndexView.java:123)
at Project.campusparttimejobversions4.view.IndexView.main(IndexView.java:86)
新加定义语句:
成了但好像没完全成,之前if……else……逻辑结构好像没理清,还有输出错误
明明有内容确未查询到
重新编写了一下申请兼职工作的方法
// 你自己个人申请工作public void applyJobForYourself(Integer jid, Date workStart) throws IOException, ClassNotFoundException {
// ArrayList<Job> jobinf = IOUtils.myDeserializable(JOBINF); //将数据反序列化出来ApplyJob aj = new ApplyJob();ArrayList<ApplyJob> job2 = new ArrayList<ApplyJob>();for (int i = 0; i < jobinf.size(); i++) {Job j = jobinf.get(i);if (j.getJid().equals(jid) && j.getJobDemand() > 0) {System.out.println("目前这个职位需要" + j.getJobDemand() + "人" + "您可以加入工作!");j.setJobDemand(j.getJobDemand() - 1);j.setStatus(1);workStart = new Date();SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");System.out.println("申请成功!于 " + df.format(workStart) + " 开始工作。");System.out.println("请输入uid:");String uid = TSUtils.inputCheck(6, 6);//先存入aj中aj.setJid(jid);aj.setUid(uid);aj.setWorkStart(workStart);aj.setWorkEnd(null);job2.add(aj); //存ArrayList<ApplyJob> job2 = new ArrayList<ApplyJob>();IOUtils.Serializable(job2, YOUJOBINF);//序列化System.out.println("信息录入完成,您已申请成功!");break;}}}
好消息是正则表达式成功啦,约束工作完成时间只能在工作开始时间之后
坏消息是出现了错误:
ConcurrentModificationException 当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常
重新整理一下代码逻辑和顺序,成啦!
// 结束工作private void endJob(Integer jid1, Date workStart) throws Exception {ArrayList<Job> jobinf = IOUtils.myDeserializable(JOBINF);ArrayList<ApplyJob> jobb = IOUtils.myDeserializable(YOUJOBINF);ArrayList<User> array = IOUtils.myDeserializable(INF);UidJid uidJid = new UidJid();if (jobb.size() > 0) {for (User users : array) { //外层for循环遍历用户for (Job jobs : jobinf) { //内层for循环遍历工作if (jobs == null) {throw new RuntimeException("工作查询出错,请联系管理员");}if (jobs.getJid().equals(jid1)) { //比较jidSystem.out.println("请输入您的uid:");String uid = TSUtils.inputCheck(6, 6);if (users.getUid().equals(uid)) { //比较uidApplyJob app = new ApplyJob();Date workEnd = null;for (ApplyJob aj : jobb) {Scanner sc = new Scanner(System.in);System.out.println("请输入结束时间(格式‘2022-08-30’):");String end = TSUtils.inputCheck(10, 10, "^((?:20(?:22)))\\-((?:0?9)|(?:1[0-2]))\\-((?:0?[1-9])|(?:[1-2][0-9])|30|31)$", "您输入的日期错误,请重新输入。");DateFormat format = new SimpleDateFormat("yyyy-MM-dd");workEnd = format.parse(end);workStart = aj.getWorkStart();long day = (workEnd.getTime() - workStart.getTime()) / (24 * 60 * 60 * 1000);Integer days = Math.toIntExact(day); //Math.toIntExact:将long类型的数据改为int类型的数据System.out.println("工作总耗时为:" + days + "天");jobs.setStatus(-1);if (days <= jobs.getJobTime() && jobs.getJobLevel() == 5) {Double tmp = users.getBalance();tmp += jobs.getSalary();System.out.println("按时完成工作,您的信用等级良好,请继续保持," +"本次工作共获得: " + jobs.getSalary());} else if (days <= jobs.getJobTime() && jobs.getJobLevel() < 5) {Double tmp = users.getBalance();tmp += jobs.getSalary();System.out.println("按时完成工作,您的信用等级为 " + jobs.getJobLevel() + " 恢复信用等级还需完成"+ ((5 - jobs.getJobLevel()) * 3 - 1) + "次工作" +"本次工作共获得: " + jobs.getSalary());return;} else if (days > jobs.getJobTime() && jobs.getJobLevel() <= 5) {jobs.setJobLevel(jobs.getJobLevel() - 1);Double tmp = users.getBalance();double salary = jobs.getSalary() - (jobs.getSalary() / jobs.getJobTime() * (days - jobs.getJobTime()));if (salary <= 0) {salary = 0;jobs.setSalary(salary);tmp += jobs.getSalary();}}System.out.println("逾期完成工作,您的信用等级降为 " + jobs.getJobLevel() + " 恢复信用等级还需完成"+ ((5 - jobs.getJobLevel()) * 3) + "次工作 " +"本次工作共获得:" + jobs.getSalary());if (jobs.getJobLevel() == 0) {System.out.println("警告!信用等级为零,无法再接取任何兼职委托!");}app.setWorkStart(workStart);app.setWorkEnd(workEnd);if (jobb == null) {ArrayList<ApplyJob> arrayListAJ = new ArrayList<>();arrayListAJ.add(app);IOUtils.Serializable(arrayListAJ, YOUJOBINF); //序列化} else {jobb.add(app); //添加到合集中IOUtils.Serializable(jobb, YOUJOBINF); //序列化System.out.println("信息录入完成!");}break;}} else {System.out.println("未查询到该工作,输入错误!返回主程序。");return;}}}for (Job js : jobinf) {if (js.getJid().equals(jid1)) {jobinf.remove(uidJid);System.out.println("该工作已移除");} else {System.out.println("输入错误!返回主界面!");return;}}}} else {System.out.println("文件内容为空,请输入后继续操作");}}