如何获取ArrayList中图书的状态?实现展示全部图书及状态的方法
解决ArrayList图书状态获取与showAllBooks方法实现问题
嘿,我来帮你搞定这个需求!你要实现的showAllBooks方法核心就是遍历ArrayList<Book>集合,取出每本书的状态并整理成字符串返回。咱们一步步来:
第一步:确保Book类具备状态相关的方法
首先你的Book类需要有状态属性和对应的获取方法,这样Catalog类才能拿到每本书的状态。比如这样定义Book类:
import java.util.Arrays; public class Book { private String title; // 书名 private String state; // 状态:INLIBRARY/ONLOAN/LOST // 构造方法 public Book(String title, String state) { this.title = title; // 增加状态合法性校验,避免传入无效值 if (Arrays.asList("INLIBRARY", "ONLOAN", "LOST").contains(state)) { this.state = state; } else { throw new IllegalArgumentException("无效的图书状态:" + state); } } // 获取书名 public String getTitle() { return title; } // 获取状态 public String getState() { return state; } // 可选:修改状态的方法 public void setState(String state) { if (Arrays.asList("INLIBRARY", "ONLOAN", "LOST").contains(state)) { this.state = state; } else { throw new IllegalArgumentException("无效的图书状态:" + state); } } }
第二步:完善Catalog类的showAllBooks方法
接下来咱们把你没写完的showAllBooks方法补全,这里推荐用增强for循环(简洁易读)和StringBuilder(高效拼接字符串,避免性能浪费):
import java.util.*; import javax.swing.JLabel; public class Catalog extends JLabel{ ArrayList<Book> books; public Catalog() { books = new ArrayList<Book>(); }//end constructor public void addBook(Book b) { books.add(b); }//end addBook public String showAllBooks() { // 用StringBuilder高效构建结果字符串 StringBuilder result = new StringBuilder(); // 遍历ArrayList中的每一本图书 for (Book book : books) { result.append("书名:").append(book.getTitle()) .append(" | 状态:").append(book.getState()) .append("\n"); // 换行分隔每本书 } // 处理空目录的情况,返回友好提示 if (result.length() == 0) { return "当前图书目录为空"; } return result.toString(); } }
额外说明:两种遍历方式的选择
如果你需要用到索引(比如显示图书序号),也可以用传统的for循环:
public String showAllBooks() { StringBuilder result = new StringBuilder(); for (int i = 0; i < books.size(); i++) { Book book = books.get(i); result.append("第").append(i + 1).append("本:") .append(book.getTitle()).append(" | 状态:") .append(book.getState()).append("\n"); } return result.length() == 0 ? "当前图书目录为空" : result.toString(); }
这样你的showAllBooks方法就能返回所有图书及其状态啦,而且代码清晰易维护~
内容的提问来源于stack exchange,提问作者Eric Graham
相关产品推荐
相关产品推荐

