版本4校园兼职软件遇到的问题和解决方法

发布于:2023-01-02 ⋅ 阅读:(171) ⋅ 点赞:(0)

出现问题:

每次只能保存一位用户信息,后面输入用户信息前面的用户信息会被覆盖

出现原因及解决方法:

因为暂存的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)) {  //比较jid
                        System.out.println("请输入您的uid:");
                        String uid = TSUtils.inputCheck(6, 6);
                        if (users.getUid().equals(uid)) {  //比较uid
                            ApplyJob 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("文件内容为空,请输入后继续操作");
        }

    }


网站公告

今日签到

点亮在社区的每一天
去签到