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

如何完善Linked List中Genre类型流派列表的展示代码?

完善LinkedList流派列表展示的代码方案

首先,我帮你梳理下现有代码里的几个关键问题,再给出完整的可运行方案:

现有代码的问题点

  • 拼写不一致:booksAvilable 和 booksAvailable 混写了,Java变量名需要保持统一
  • 类名大小写错误:实例化对象时用了小写的book,Java类名必须首字母大写,应该是new Book(...)
  • 循环遍历错误:for(Book books:booksAvilable()) 这里多了括号,直接用集合变量名booksAvailable即可
  • 方法调用不完整:books.getGenre... 没有写完,需要调用Book类中获取Genre对象的getter方法

另外,根据需求我分两种场景给出代码:一种是展示每本书对应的流派,另一种是展示去重后的流派列表(避免重复输出同一流派)。


场景1:展示每本书对应的流派(不做去重)

public void outputGenre() {
    // 统一变量名,修正拼写错误
    LinkedList<Book> booksAvailable = new LinkedList<>();
    
    // 修正类名大小写:Book首字母大写
    booksAvailable.add(new Book("Enders Game", 1999, new Genre("SciFi"), 3));
    booksAvailable.add(new Book("Star Trek", 1974, new Genre("SciFi"), 4));
    booksAvailable.add(new Book("Game of Thrones", 1991, new Genre("Drama"), 3));

    System.out.println("We have following Genres (per book):");
    // 修正遍历方式,直接遍历集合
    for (Book book : booksAvailable) {
        // 调用Book类的getGenre()方法获取流派对象,再调用Genre类的getName()获取名称
        Genre genre = book.getGenre();
        System.out.println("- " + genre.getName());
    }
}

场景2:展示去重后的流派列表

如果希望避免重复展示同一流派,可以用Set存储流派名称(或直接存储Genre对象,需重写equals和hashCode方法):

import java.util.HashSet;
import java.util.Set;

public void outputGenre() {
    LinkedList<Book> booksAvailable = new LinkedList<>();
    booksAvailable.add(new Book("Enders Game", 1999, new Genre("SciFi"), 3));
    booksAvailable.add(new Book("Star Trek", 1974, new Genre("SciFi"), 4));
    booksAvailable.add(new Book("Game of Thrones", 1991, new Genre("Drama"), 3));

    System.out.println("We have following unique Genres:");
    Set<String> uniqueGenres = new HashSet<>();
    for (Book book : booksAvailable) {
        String genreName = book.getGenre().getName();
        uniqueGenres.add(genreName);
    }
    // 遍历输出去重后的流派
    for (String genre : uniqueGenres) {
        System.out.println("- " + genre);
    }
}

配套类的补充实现

要让上述代码正常运行,Book和Genre类需要具备对应的getter方法,示例如下:

// Genre类示例
class Genre {
    private String name;
    public Genre(String name) {
        this.name = name;
    }
    // 获取流派名称的getter方法
    public String getName() {
        return name;
    }

    // 如果要直接用Set存储Genre对象去重,需重写equals和hashCode
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Genre genre = (Genre) o;
        return name.equals(genre.name);
    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }
}

// Book类示例
class Book {
    private String title;
    private int year;
    private Genre genre;
    private int rating;

    public Book(String title, int year, Genre genre, int rating) {
        this.title = title;
        this.year = year;
        this.genre = genre;
        this.rating = rating;
    }

    // 获取Genre对象的getter方法
    public Genre getGenre() {
        return genre;
    }
}

这样就能完美实现展示流派列表的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:40:50