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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:35:11