如何在打印评论及回复时关联显示对应游戏名称?
解决评论关联游戏名称的问题
嘿,我来帮你搞定这个问题!你已经完成了评论分组和嵌套回复的核心部分,只差把游戏名称和对应评论关联起来显示对吧?核心问题在于当前的Comment类没有记录它所属的游戏对象,或者说你还没利用已有的游戏分组逻辑来串联输出。这里有两种简单的解决思路,你可以根据需求选择:
思路一:直接从游戏对象出发遍历输出(最简单)
既然你已经能按游戏对评论分组,说明你肯定有一个游戏集合(比如List<Game>)。那咱们直接遍历每个游戏,先打印游戏名称,再依次输出它下面的评论和回复就好了,完全不用修改Comment类!
步骤:
- 给
Content类加一个获取评论列表的方法(原代码里Review是protected,方便外部访问):
public abstract class Content { protected List<Comment> review = new ArrayList<Comment>(); // 建议改成小驼峰命名,符合Java规范 // ... 其他原有代码 public List<Comment> getReviews() { return review; } }
(顺便提一句:变量名Review改成review,Application_Name改成applicationName,这样更符合Java命名习惯,代码可读性更高)
- 编写遍历打印的代码:
// 假设你有一个存储所有游戏的列表 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类加一个关联游戏的成员变量,这样不管在哪里拿到评论对象,都能直接获取游戏名称。
步骤:
- 修改
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() : "未知游戏"; } // ... 其他原有方法 }
- 修改
Content类的addReviews方法,在添加评论时自动关联游戏:
public void addReviews(Comment a) { a.setParentContent(this); // 把当前游戏对象绑定给评论 this.review.add(a); }
- 之后不管你在哪里拿到
Comment对象,都可以通过comment.getGameName()获取对应的游戏名称,比如打印时:
// 示例:遍历单条评论时获取游戏名称 Comment someComment = ...; System.out.println("《" + someComment.getGameName() + "》的评论"); // ... 打印评论和回复内容
这种方法更灵活,适合需要在多个场景下获取评论所属游戏的情况。
小提示
- 记得给
User类补充getUserId()方法哦,不然打印用户ID的时候会报错~ - 变量名尽量遵循Java小驼峰规范,能让你的代码更易读、更专业。
内容的提问来源于stack exchange,提问作者N Woods




