## 第 9 题:构造方法 + 封装 + 对象数组 + 排序——BookManager ⭐⭐⭐⭐ **包名**:`p09_bookmanager` ### 图书类(类名自拟,置于 `p09_bookmanager` 包下) - **私有属性**:`id`(编号,int)、`title`(书名,String)、`price`(价格,double) - **全参构造方法** - **getter/setter** ### 管理类(类名自拟,置于 `p09_bookmanager` 包下) 包含以下方法: | 方法 | 说明 | | ------------------------------------------------- | ------------------------------------------------------------ | | `initBooks()` | 创建并返回一个包含 **5 本图书** 的数组(使用全参构造初始化) | | `printBooks(图书数组类型 books)` | 遍历输出所有图书信息 | | `sortByPrice(图书数组类型 books)` | 按价格**从高到低**排序(冒泡排序) | | `searchByTitle(图书数组类型 books, String title)` | 根据书名查找图书,返回找到的图书对象(找不到返回 `null`) | ### 测试类要求(测试类类名自拟,置于 `p09_bookmanager` 包下) 1. 调用 `initBooks()` 初始化图书数组 2. 调用 `printBooks()` 输出原始顺序 3. 调用 `sortByPrice()` 排序后再次输出 4. 调用 `searchByTitle()` 查找某本书,输出查找结果 **示例数据**: ```java new 图书类(1001, "Java从入门到精通", 79.0) new 图书类(1002, "数据结构与算法", 65.0) new 图书类(1003, "设计模式之禅", 58.0) new 图书类(1004, "深入理解JVM", 89.0) new 图书类(1005, "计算机网络", 45.0) ``` **示例运行效果**: ``` ========== 原始顺序 ========== 编号:1001,书名:Java从入门到精通,价格:79.0 编号:1002,书名:数据结构与算法,价格:65.0 编号:1003,书名:设计模式之禅,价格:58.0 编号:1004,书名:深入理解JVM,价格:89.0 编号:1005,书名:计算机网络,价格:45.0 ========== 按价格从高到低排序 ========== 编号:1004,书名:深入理解JVM,价格:89.0 编号:1001,书名:Java从入门到精通,价格:79.0 编号:1002,书名:数据结构与算法,价格:65.0 编号:1003,书名:设计模式之禅,价格:58.0 编号:1005,书名:计算机网络,价格:45.0 ========== 查找图书 ========== 查找 "设计模式之禅": 找到了!编号:1003,价格:58.0 查找 "操作系统": 未找到该图书! ``` > 💡 **提示**: > > - `initBooks()` 是**无参有返回值**方法,在方法内部创建数组并返回 > - 冒泡排序中比较价格时,使用 `>` 进行降序排列(从高到低) > - `searchByTitle()` 使用 `equals()` 或 `equalsIgnoreCase()` 比较书名 > - 管理类的方法都是**实例方法**,测试类中需先创建管理类对象再调用