如何在Game类的printAllReview()中打印评论及关联回复?
我来帮你搞定这个层级评论打印的问题!核心问题在于评论的回复是嵌套的层级结构,得用递归遍历才能把所有层级的回复都关联打印出来,下面给你一步步拆解解决方案:
第一步:给Comment类添加递归打印方法
在Comment类里新增一个带缩进参数的递归方法,负责打印自身内容,然后递归遍历所有子回复,用缩进区分层级,这样就能直观展示评论的嵌套关系:
public class Comment { private String content; private String author; // 可以加个作者字段让打印更清晰 private List<Comment> replies = new ArrayList<>(); // 构造器、addReply()、getter/setter这些你应该已经有了,这里省略 // 递归打印当前评论及所有层级回复,indent控制缩进量 public void printWithReplies(int indent) { // 用缩进区分层级,打印当前评论的作者和内容 String indentStr = " ".repeat(indent); System.out.println(indentStr + "💬 " + author + ": " + content); // 递归遍历每个子回复,缩进增加2(可以根据喜好调整) for (Comment reply : replies) { reply.printWithReplies(indent + 2); } } }
第二步:修改Game类的printAllReview()方法
现在Game类只需要遍历所有顶层评论,然后调用每个评论的递归打印方法就行,不用自己处理嵌套逻辑:
public class Game extends Content { // 你的其他属性、addReviews()方法这里省略 @Override public void printAllReview() { System.out.println("=== 《" + getTitle() + "》的评论区 ==="); // 遍历Content中存储的所有顶层评论 for (Comment review : getReviews()) { review.printWithReplies(0); // 顶层评论初始缩进为0 } } }
第三步:完整可运行代码示例
为了让你更清楚整个结构,我把所有必要代码补全,包含测试逻辑:
import java.util.ArrayList; import java.util.List; // 抽象Content类 abstract class Content { private String title; private List<Comment> reviews = new ArrayList<>(); public Content(String title) { this.title = title; } // 添加单条评论的基础方法 public void addReview(Comment comment) { reviews.add(comment); } // 给子类提供获取评论列表的方法 protected List<Comment> getReviews() { return reviews; } public String getTitle() { return title; } // 抽象打印方法,由Game实现 public abstract void printAllReview(); } // Game类继承Content class Game extends Content { public Game(String title) { super(title); } // 你提到的addReviews()方法,这里实现为批量添加(单条也兼容) public void addReviews(Comment... comments) { for (Comment comment : comments) { super.addReview(comment); } } @Override public void printAllReview() { System.out.println("=== 《" + getTitle() + "》的评论区 ==="); for (Comment review : getReviews()) { review.printWithReplies(0); } } } // Comment类 class Comment { private String content; private String author; private List<Comment> replies = new ArrayList<>(); public Comment(String author, String content) { this.author = author; this.content = content; } // 添加层级回复的方法 public void addReply(Comment reply) { replies.add(reply); } // 递归打印评论及所有层级回复 public void printWithReplies(int indent) { String indentStr = " ".repeat(indent); System.out.println(indentStr + "💬 " + author + ": " + content); for (Comment reply : replies) { reply.printWithReplies(indent + 2); } } } // 测试主类 public class GameReviewTest { public static void main(String[] args) { // 创建游戏对象 Game zelda = new Game("塞尔达传说:王国之泪"); // 构建嵌套评论结构 Comment review1 = new Comment("林克粉", "这游戏太神了!开放世界天花板!"); Comment reply1_1 = new Comment("新手玩家", "请问前期怎么获取武器呀?"); Comment reply1_2 = new Comment("老玩家", "去初始台地的山洞里有不少武器,或者砍树做木棒!"); reply1_1.addReply(reply1_2); // 给reply1_1加二级回复 review1.addReply(reply1_1); // 给review1加一级回复 Comment review2 = new Comment("休闲玩家", "画风很治愈,就是解谜有点难QAQ"); // 添加评论到游戏 zelda.addReviews(review1, review2); // 打印所有评论及层级回复 zelda.printAllReview(); } }
运行效果
执行上面的代码会输出清晰的层级评论:
=== 《塞尔达传说:王国之泪》的评论区 === 💬 林克粉: 这游戏太神了!开放世界天花板! 💬 新手玩家: 请问前期怎么获取武器呀? 💬 老玩家: 去初始台地的山洞里有不少武器,或者砍树做木棒! 💬 休闲玩家: 画风很治愈,就是解谜有点难QAQ
这样就完美实现了所有评论及对应层级回复的关联打印,核心就是利用递归遍历Comment的嵌套回复列表,通过缩进直观展示层级关系。
内容的提问来源于stack exchange,提问作者N Woods
相关产品推荐
相关产品推荐

