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

因为暂存的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
jobinf = IOUtils.myDeserializable(JOBINF); //将数据反序列化出来 - ApplyJob aj = new ApplyJob();
- ArrayList
job2 = new ArrayList(); - 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
job2 = new ArrayList(); - IOUtils.Serializable(job2, YOUJOBINF);//序列化
- System.out.println("信息录入完成,您已申请成功!");
- break;
- }
- }
- }
好消息是正则表达式成功啦,约束工作完成时间只能在工作开始时间之后

坏消息是出现了错误:
ConcurrentModificationException 当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常

重新整理一下代码逻辑和顺序,成啦!
- // 结束工作
- private void endJob(Integer jid1, Date workStart) throws Exception {
- ArrayList
jobinf = IOUtils.myDeserializable(JOBINF); - ArrayList
jobb = IOUtils.myDeserializable(YOUJOBINF); - ArrayList
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
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("文件内容为空,请输入后继续操作");
- }
-
- }
