Java新手求助:如何对比Books列表与Awards映射并输出指定结果?
Java实现书籍列表与奖项映射的遍历逻辑
作为Java新手,这个需求刚好能帮你练习类的封装和**集合(列表、映射)**的基础用法,我给你一步步拆解实现方式:
1. 先定义Book类来封装书籍信息
我们需要存储每本书的标题、作者和销量,所以先创建一个简单的POJO(普通Java对象):
public class Book { private String title; private String author; private int copiesSold; // 构造方法,创建Book对象时直接传入属性值 public Book(String title, String author, int copiesSold) { this.title = title; this.author = author; this.copiesSold = copiesSold; } // Getter方法,用来获取私有属性的值(因为属性是private,外部不能直接访问) public String getTitle() { return title; } public String getAuthor() { return author; } public int getCopiesSold() { return copiesSold; } }
2. 编写主逻辑类处理遍历和输出
接下来在主类里初始化书籍列表和奖项映射,然后遍历每本书判断输出格式:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class BookAwardProcessor { public static void main(String[] args) { // 初始化书籍列表,把你需要的书籍都加进去 List<Book> books = new ArrayList<>(); books.add(new Book("Romeo and Juliet", "Shakespeare", 4500)); books.add(new Book("1984", "George Orwell", 8000000)); books.add(new Book("Hamlet", "Shakespeare", 3800)); books.add(new Book("To Kill a Mockingbird", "Harper Lee", 40000000)); // 初始化奖项映射,key是作者名,value是对应的奖项 Map<String, String> awards = new HashMap<>(); awards.put("Shakespeare", "Too much drama award"); // 要是以后想加其他作者的奖项,直接add就行,比如: // awards.put("George Orwell", "Dystopian Visionary Award"); // 遍历书籍列表,逐个处理 for (Book book : books) { String author = book.getAuthor(); // 检查当前书籍的作者是否在奖项映射里 if (awards.containsKey(author)) { // 匹配到Shakespeare(或其他有奖项的作者),按指定格式输出 System.out.printf("The book \"%s\" by %s which sold %d copies, received %s%n", book.getTitle(), author, book.getCopiesSold(), awards.get(author)); } else { // 没有匹配到奖项的情况,输出无奖项 System.out.printf("The book \"%s\" by %s which sold %d copies, received no award%n", book.getTitle(), author, book.getCopiesSold()); } } } }
3. 代码运行结果
运行这个程序后,你会看到如下输出:
The book "Romeo and Juliet" by Shakespeare which sold 4500 copies, received Too much drama award
The book "1984" by George Orwell which sold 8000000 copies, received no award
The book "Hamlet" by Shakespeare which sold 3800 copies, received Too much drama award
The book "To Kill a Mockingbird" by Harper Lee which sold 40000000 copies, received no award
新手小贴士
- 如果你需要添加更多书籍,直接调用
books.add(new Book(...))就行,非常灵活。 - 奖项映射可以随时扩展,比如给其他作者添加奖项,不需要修改遍历逻辑,符合开闭原则。
printf方法用来格式化字符串非常方便,里面的%s代表字符串占位符,%d代表整数占位符,顺序要和后面的参数对应哦。
内容的提问来源于stack exchange,提问作者Viktors
相关产品推荐
相关产品推荐

