You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在打印评论及回复时关联显示对应游戏名称?

解决评论关联游戏名称的问题

嘿,我来帮你搞定这个问题!你已经完成了评论分组和嵌套回复的核心部分,只差把游戏名称和对应评论关联起来显示对吧?核心问题在于当前的Comment类没有记录它所属的游戏对象,或者说你还没利用已有的游戏分组逻辑来串联输出。这里有两种简单的解决思路,你可以根据需求选择:

思路一:直接从游戏对象出发遍历输出(最简单)

既然你已经能按游戏对评论分组,说明你肯定有一个游戏集合(比如List<Game>)。那咱们直接遍历每个游戏,先打印游戏名称,再依次输出它下面的评论和回复就好了,完全不用修改Comment类!

步骤:

  1. Content类加一个获取评论列表的方法(原代码里Review是protected,方便外部访问):
public abstract class Content {
    protected List<Comment> review = new ArrayList<Comment>(); // 建议改成小驼峰命名,符合Java规范
    // ... 其他原有代码

    public List<Comment> getReviews() {
        return review;
    }
}

(顺便提一句:变量名Review改成reviewApplication_Name改成applicationName,这样更符合Java命名习惯,代码可读性更高)

  1. 编写遍历打印的代码:
// 假设你有一个存储所有游戏的列表
List<Game> allGames = new ArrayList<>();
// 先把你的game1、game2等实例添加到这个列表里

// 遍历每个游戏
for (Game game : allGames) {
    // 先打印游戏名称
    System.out.println("《" + game.getApplication_Name() + "》的评论——这是我需要实现的部分,其余内容已完成。");
    
    // 遍历该游戏下的所有评论
    int commentIndex = 1;
    for (Comment comment : game.getReviews()) {
        // 打印评论内容
        System.out.printf("评论%d/ 用户ID: %s; 姓名: %s; \"%s\"%n",
                commentIndex,
                comment.getUser().getUserId(), // 假设User类有getUserId()方法
                comment.getUser().getUsr(),
                comment.getUsrComment());
        
        // 递归打印该评论的所有嵌套回复
        printReplyComments(comment, 1);
        commentIndex++;
    }
}

// 递归打印回复的辅助方法
private static void printReplyComments(Comment parentComment, int replyIndex) {
    for (Comment reply : parentComment.getReply()) {
        System.out.printf("回复%d/ 用户ID: %s; 姓名: %s; \"%s\"%n",
                replyIndex,
                reply.getUser().getUserId(),
                reply.getUser().getUsr(),
                reply.getUsrComment());
        
        // 如果回复还有子回复,继续递归打印
        printReplyComments(reply, replyIndex + 1);
    }
}

这种方法逻辑简单,不需要改动评论类,适合只是批量输出的场景。

思路二:给Comment类添加所属游戏的引用(更灵活)

如果你需要在任何场景下都能直接知道某条评论属于哪个游戏,那可以给Comment类加一个关联游戏的成员变量,这样不管在哪里拿到评论对象,都能直接获取游戏名称。

步骤:

  1. 修改Comment类,添加关联的Content对象:
public class Comment {
    protected List<Comment> reply = new ArrayList<Comment>();
    private User user;
    private String usrComment;
    private Content parentContent; // 新增:记录这条评论所属的游戏/内容

    public Comment() { }

    // 添加setter方法,用来关联所属游戏
    public void setParentContent(Content parentContent) {
        this.parentContent = parentContent;
    }

    // 获取所属游戏名称的方法
    public String getGameName() {
        return parentContent != null ? parentContent.getApplication_Name() : "未知游戏";
    }

    // ... 其他原有方法
}
  1. 修改Content类的addReviews方法,在添加评论时自动关联游戏:
public void addReviews(Comment a) {
    a.setParentContent(this); // 把当前游戏对象绑定给评论
    this.review.add(a);
}
  1. 之后不管你在哪里拿到Comment对象,都可以通过comment.getGameName()获取对应的游戏名称,比如打印时:
// 示例:遍历单条评论时获取游戏名称
Comment someComment = ...;
System.out.println("《" + someComment.getGameName() + "》的评论");
// ... 打印评论和回复内容

这种方法更灵活,适合需要在多个场景下获取评论所属游戏的情况。

小提示

  • 记得给User类补充getUserId()方法哦,不然打印用户ID的时候会报错~
  • 变量名尽量遵循Java小驼峰规范,能让你的代码更易读、更专业。

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

火山引擎 最新活动