如何匹配文本文件生成的Book数组的title/ISBN,解决数组调用get方法报错
错误原因
你代码里的参数b是Book类型的数组,而非单个Book实例,数组本身没有getTitle()、getISBN()这类自定义成员方法,必须先通过下标[i]访问到数组中对应位置的单个Book对象后,才能调用对应getter方法,这是触发报错的直接原因。
其他代码问题
- 你的用户输入存储在
input变量中,但判断匹配时使用了未定义的title、isbn变量,逻辑不成立 - while循环中没有对计数器
i做自增操作,运行时会陷入死循环 - 逻辑判断中使用了单与
&,应该替换为短路与&&,避免前面条件不成立时仍执行后续判断导致空指针异常
修正后的代码片段
public static int searchByTitleOrISBN(Book[] b) { int i = 0; System.out.println("Enter the Title or ISBN of the book: "); String input = scan.next(); while (i < b.length) { // 先通过b[i]获取单个Book对象再调用方法 Book currentBook = b[i]; if ((currentBook.getTitle().equals(input) || currentBook.getISBN().equals(input)) && currentBook.getQty() > 0 && currentBook.isForSale()) { // 匹配到符合要求的书籍,返回对应数组下标 return i; } i++; // 计数器自增 } // 未匹配到符合要求的书籍返回-1 return -1; }
可选优化
如果书籍的title或ISBN可能为null,建议用java.util.Objects.equals()方法比对,避免空指针异常,匹配判断可修改为:(Objects.equals(currentBook.getTitle(), input) || Objects.equals(currentBook.getISBN(), input))
内容的提问来源于stack exchange,提问作者User238742837
相关产品推荐
相关产品推荐

