You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

问题跟踪系统开发:为指定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里,新增了评论列表的展示逻辑,空评论时提示暂无,有评论时按序号显示内容和时间戳,用户体验更清晰

核心问题复盘

  1. 原来的Issue类设计只能存单条评论,改成列表后支持多条评论存储
  2. 评论的时间戳应该在添加时自动生成,不需要用户手动输入,减少操作成本
  3. commentIssue的逻辑错误:之前不管有没有找到Issue都会执行输入评论的代码,现在修正为找到目标Issue后才执行评论添加逻辑
  4. 展示Issue时,需要遍历评论列表逐个显示,才能完整呈现所有评论信息

这样修改后,就能实现给指定ID的Issue添加多条带时间戳的评论,并且在查看时完整展示所有内容啦!

内容的提问来源于stack exchange,提问作者GudenLjunkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:51:01