如何完善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
相关产品推荐
相关产品推荐

