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


    出现问题:

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

    出现原因及解决方法:

    因为暂存的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……逻辑结构好像没理清,还有输出错误

    明明有内容确未查询到

    重新编写了一下申请兼职工作的方法

    1. // 你自己个人申请工作
    2. public void applyJobForYourself(Integer jid, Date workStart) throws IOException, ClassNotFoundException {
    3. // ArrayList jobinf = IOUtils.myDeserializable(JOBINF); //将数据反序列化出来
    4. ApplyJob aj = new ApplyJob();
    5. ArrayList job2 = new ArrayList();
    6. for (int i = 0; i < jobinf.size(); i++) {
    7. Job j = jobinf.get(i);
    8. if (j.getJid().equals(jid) && j.getJobDemand() > 0) {
    9. System.out.println("目前这个职位需要" + j.getJobDemand() + "人" + "您可以加入工作!");
    10. j.setJobDemand(j.getJobDemand() - 1);
    11. j.setStatus(1);
    12. workStart = new Date();
    13. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    14. System.out.println("申请成功!于 " + df.format(workStart) + " 开始工作。");
    15. System.out.println("请输入uid:");
    16. String uid = TSUtils.inputCheck(6, 6);
    17. //先存入aj中
    18. aj.setJid(jid);
    19. aj.setUid(uid);
    20. aj.setWorkStart(workStart);
    21. aj.setWorkEnd(null);
    22. job2.add(aj); //存ArrayList job2 = new ArrayList();
    23. IOUtils.Serializable(job2, YOUJOBINF);//序列化
    24. System.out.println("信息录入完成,您已申请成功!");
    25. break;
    26. }
    27. }
    28. }

    好消息是正则表达式成功啦,约束工作完成时间只能在工作开始时间之后

     坏消息是出现了错误:

    ConcurrentModificationException 当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常

     重新整理一下代码逻辑和顺序,成啦! 

    1. // 结束工作
    2. private void endJob(Integer jid1, Date workStart) throws Exception {
    3. ArrayList jobinf = IOUtils.myDeserializable(JOBINF);
    4. ArrayList jobb = IOUtils.myDeserializable(YOUJOBINF);
    5. ArrayList array = IOUtils.myDeserializable(INF);
    6. UidJid uidJid = new UidJid();
    7. if (jobb.size() > 0) {
    8. for (User users : array) { //外层for循环遍历用户
    9. for (Job jobs : jobinf) { //内层for循环遍历工作
    10. if (jobs == null) {
    11. throw new RuntimeException("工作查询出错,请联系管理员");
    12. }
    13. if (jobs.getJid().equals(jid1)) { //比较jid
    14. System.out.println("请输入您的uid:");
    15. String uid = TSUtils.inputCheck(6, 6);
    16. if (users.getUid().equals(uid)) { //比较uid
    17. ApplyJob app = new ApplyJob();
    18. Date workEnd = null;
    19. for (ApplyJob aj : jobb) {
    20. Scanner sc = new Scanner(System.in);
    21. System.out.println("请输入结束时间(格式‘2022-08-30’):");
    22. String end = TSUtils.inputCheck(10, 10, "^((?:20(?:22)))\\-((?:0?9)|(?:1[0-2]))\\-((?:0?[1-9])|(?:[1-2][0-9])|30|31)$", "您输入的日期错误,请重新输入。");
    23. DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    24. workEnd = format.parse(end);
    25. workStart = aj.getWorkStart();
    26. long day = (workEnd.getTime() - workStart.getTime()) / (24 * 60 * 60 * 1000);
    27. Integer days = Math.toIntExact(day); //Math.toIntExact:将long类型的数据改为int类型的数据
    28. System.out.println("工作总耗时为:" + days + "天");
    29. jobs.setStatus(-1);
    30. if (days <= jobs.getJobTime() && jobs.getJobLevel() == 5) {
    31. Double tmp = users.getBalance();
    32. tmp += jobs.getSalary();
    33. System.out.println("按时完成工作,您的信用等级良好,请继续保持," +
    34. "本次工作共获得: " + jobs.getSalary());
    35. } else if (days <= jobs.getJobTime() && jobs.getJobLevel() < 5) {
    36. Double tmp = users.getBalance();
    37. tmp += jobs.getSalary();
    38. System.out.println("按时完成工作,您的信用等级为 " + jobs.getJobLevel() + " 恢复信用等级还需完成"
    39. + ((5 - jobs.getJobLevel()) * 3 - 1) + "次工作" +
    40. "本次工作共获得: " + jobs.getSalary());
    41. return;
    42. } else if (days > jobs.getJobTime() && jobs.getJobLevel() <= 5) {
    43. jobs.setJobLevel(jobs.getJobLevel() - 1);
    44. Double tmp = users.getBalance();
    45. double salary = jobs.getSalary() - (jobs.getSalary() / jobs.getJobTime() * (days - jobs.getJobTime()));
    46. if (salary <= 0) {
    47. salary = 0;
    48. jobs.setSalary(salary);
    49. tmp += jobs.getSalary();
    50. }
    51. }
    52. System.out.println("逾期完成工作,您的信用等级降为 " + jobs.getJobLevel() + " 恢复信用等级还需完成"
    53. + ((5 - jobs.getJobLevel()) * 3) + "次工作 " +
    54. "本次工作共获得:" + jobs.getSalary());
    55. if (jobs.getJobLevel() == 0) {
    56. System.out.println("警告!信用等级为零,无法再接取任何兼职委托!");
    57. }
    58. app.setWorkStart(workStart);
    59. app.setWorkEnd(workEnd);
    60. if (jobb == null) {
    61. ArrayList arrayListAJ = new ArrayList<>();
    62. arrayListAJ.add(app);
    63. IOUtils.Serializable(arrayListAJ, YOUJOBINF); //序列化
    64. } else {
    65. jobb.add(app); //添加到合集中
    66. IOUtils.Serializable(jobb, YOUJOBINF); //序列化
    67. System.out.println("信息录入完成!");
    68. }
    69. break;
    70. }
    71. } else {
    72. System.out.println("未查询到该工作,输入错误!返回主程序。");
    73. return;
    74. }
    75. }
    76. }
    77. for (Job js : jobinf) {
    78. if (js.getJid().equals(jid1)) {
    79. jobinf.remove(uidJid);
    80. System.out.println("该工作已移除");
    81. } else {
    82. System.out.println("输入错误!返回主界面!");
    83. return;
    84. }
    85. }
    86. }
    87. } else {
    88. System.out.println("文件内容为空,请输入后继续操作");
    89. }
    90. }

  • 相关阅读:
    【开源】SpringBoot框架开发固始鹅块销售系统
    远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你
    Labs‘Codes review(AVR)(3)
    安装docker,docker-compose
    java泛型机制详解篇二(深入理解泛型篇一)
    选择适合你的知识付费小程序平台
    禁止瘟疫清零计划 Project Zero与VR一起启动
    web前端 html+css+javascript 绿色的随行旅游网页设计实例 企业网站制作
    docker容器化技术
    Safe Head机制技术理论分析
  • 原文地址:https://blog.csdn.net/clover_oreo/article/details/126634219