问题跟踪系统开发:为指定ID的Issue添加带时间戳评论功能求助
解决Issue添加多评论带时间戳的问题
看起来你现在的核心问题是单个Issue只能存一条评论,而且评论没有时间戳,同时commentIssue方法的逻辑也有问题——你现在找到对应Issue后,居然新建了一个Issue对象,而不是在原Issue上添加评论。我来一步步帮你修正:
第一步:重构Issue类,支持多评论和时间戳
首先,我们需要给每个Issue添加一个List<Comment>来存储多条评论,同时创建一个Comment内部类来保存评论内容和时间戳:
import java.util.ArrayList; import java.util.Date; import java.util.List; public class Issue { private String ID; private String issueName; private String localDate; private String issueStatus; // 用列表存储多条评论,每条评论是Comment对象 private List<Comment> comments = new ArrayList<>(); // 原构造方法,创建Issue时记录创建时间 public Issue(String ID, String issueName, String issueStatus) { this.ID = ID; this.issueName = issueName; this.localDate = new Date().toString(); this.issueStatus = issueStatus; } // 添加评论的方法,外部调用这个方法来添加评论,自动记录时间 public void addComment(String commentContent) { this.comments.add(new Comment(commentContent, new Date().toString())); } // 获取所有评论的方法 public List<Comment> getComments() { return comments; } // 内部类:存储单条评论的内容和时间戳 public static class Comment { private String content; private String timestamp; public Comment(String content, String timestamp) { this.content = content; this.timestamp = timestamp; } public String getContent() { return content; } public String getTimestamp() { return timestamp; } } // 原有的getter和setter方法保留 public String getID() { return this.ID; } public String getIssueName() { return this.issueName; } public String getLocalDate() { return this.localDate; } public String getIssueStatus() { return this.issueStatus; } public void setID(String ID) { this.ID = ID; } public void setIssueName(String issueName) { this.issueName = issueName; } public void setIssueStatus(String issueStatus) { this.issueStatus = issueStatus; } public void setLocalDate(String localDate) { this.localDate = localDate; } }
关键修改说明
- 去掉了原来的单个
issueComment字段,换成List<Comment>,这样能存储多条评论 - 新增
addComment方法,外部只需要传入评论内容,方法内部自动创建带时间戳的Comment对象并加入列表 - 新增
Comment内部类,封装评论内容和时间戳,结构更清晰,便于后续扩展
第二步:修复commentIssue方法的逻辑
原来的方法里,输入评论的代码位置错误,而且没有正确给找到的Issue添加评论,现在修正:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Class2 { Scanner input = new Scanner(System.in); ArrayList<Issue> issues = new ArrayList<>(); public void commentIssue() { System.out.println("请输入您要评论的Issue的ID:"); String inputNewID = input.nextLine(); boolean isIssueFound = false; for (Issue issue : issues) { if (inputNewID.equals(issue.getID())) { isIssueFound = true; // 找到对应Issue后,才提示输入评论 System.out.println("请输入您的评论内容:"); String commentContent = input.nextLine(); // 调用Issue的addComment方法添加评论,自动带时间戳 issue.addComment(commentContent); System.out.println("评论添加成功!"); // 找到后跳出循环,不用继续遍历 break; } } if (!isIssueFound) { System.out.println("ID错误,请重试。"); } } // 第三步:修改retrieveIssue方法,显示所有评论 public void retrieveIssue() { System.out.println("请输入您要查看的Issue的ID:"); String inputNewID = input.nextLine(); boolean isIssueFound = false; for (Issue issue : issues) { if (inputNewID.equals(issue.getID())) { isIssueFound = true; // 先显示Issue基本信息 System.out.println("ID: " + issue.getID()); System.out.println("Name: " + issue.getIssueName()); System.out.println("创建时间: " + issue.getLocalDate()); System.out.println("Status: " + issue.getIssueStatus()); // 显示所有评论 System.out.println("\n评论列表:"); List<Issue.Comment> comments = issue.getComments(); if (comments.isEmpty()) { System.out.println("暂无评论"); } else { for (int i = 0; i < comments.size(); i++) { Issue.Comment comment = comments.get(i); System.out.printf("评论%d:%s\n时间:%s\n", i+1, comment.getContent(), comment.getTimestamp()); } } break; } } if (!isIssueFound) { System.out.println("ID错误,请重试。"); } } }
关键修改说明
commentIssue里,只有找到对应Issue后才会提示输入评论,调用issue.addComment()完成添加,然后break跳出循环,避免无效遍历retrieveIssue里,新增了评论列表的展示逻辑,空评论时提示暂无,有评论时按序号显示内容和时间戳,用户体验更清晰
核心问题复盘
- 原来的Issue类设计只能存单条评论,改成列表后支持多条评论存储
- 评论的时间戳应该在添加时自动生成,不需要用户手动输入,减少操作成本
commentIssue的逻辑错误:之前不管有没有找到Issue都会执行输入评论的代码,现在修正为找到目标Issue后才执行评论添加逻辑- 展示Issue时,需要遍历评论列表逐个显示,才能完整呈现所有评论信息
这样修改后,就能实现给指定ID的Issue添加多条带时间戳的评论,并且在查看时完整展示所有内容啦!
内容的提问来源于stack exchange,提问作者GudenLjunkan
相关产品推荐
相关产品推荐

