2026年7月21日-作业.md 8.9 KB

2026-07-21 JavaSE 课后作业

课程内容:构造方法(构造器)—— 无参构造、有参构造、构造方法重载、this() 调用、封装综合应用

涉及前序知识:封装、对象数组、Random、Scanner、冒泡排序、数组遍历

提交方式:在 提交\姓名\ 目录下创建对应的 Java 源文件

截止时间:下次上课前


📌 本次作业重要说明

命名要求变更

与以往作业不同,本次作业不再要求类名按指定格式命名,而是要求包名按指定格式命名

变化 之前的要求 本次的要求
类名 必须按 Demo_XX_姓名 格式命名 自由命名(见下文要求)
包名 不要求(默认包) 必须按指定包名创建
文件名 必须与类名一致 与类名一致即可

具体要求

  1. 每个题目对应一个独立的包,包名在题目中已指定
  2. 每个包下包含该题所需的所有类(实体类 + 测试类)
  3. 类名自由命名,但需见名知意(如实体类用 MovieGuessGameBookV2 等均可)
  4. 测试类建议命名为 TestXxxXxxTest(如 TestMovieGuessGameTest
  5. 每个 Java 源文件顶部需包含以下注释模板:

    /**
    * @author 你的姓名
    * @title 题目X:题目名称
    * @create 2026/7/21
    */
    

提交目录结构示例

提交\
└─ 张三\
    ├─ p07_movie\          ← 第 7 题的包
    │   ├─ Movie.java      ← 实体类(类名自拟)
    │   └─ TestMovie.java  ← 测试类(类名自拟)
    ├─ p08_guessgame\       ← 第 8 题的包
    │   ├─ GuessGame.java
    │   └─ GuessGameTest.java
    └─ p09_bookmanager\     ← 第 9 题的包
        ├─ BookV2.java
        ├─ BookManager.java
        └─ BookManagerTest.java

注意:包名必须严格按题目要求书写(全小写),目录结构必须与包结构一致。


第 7 题:构造方法 + 对象数组 + 遍历打印——Movie 类 ⭐⭐⭐

包名p07_movie

创建一个电影类(类名自拟),包含:

  • 私有属性title(片名)、director(导演)、year(上映年份,int)、rating(评分,double)
  • 全参构造方法
  • getter/setter
  • 方法showInfo() 输出电影信息

测试类要求(测试类类名自拟,置于 p07_movie 包下):

  1. 创建一个电影对象数组,存储至少 4 部电影
  2. 使用 全参构造方法一次性初始化 所有电影对象(不要用无参构造 + setter)
  3. 遍历数组,输出评分最高的电影信息

示例数据

"肖申克的救赎", "弗兰克·德拉邦特", 1994, 9.7
"霸王别姬", "陈凯歌", 1993, 9.6
"阿甘正传", "罗伯特·泽米吉斯", 1994, 9.5
"泰坦尼克号", "詹姆斯·卡梅隆", 1997, 9.4

示例输出

========== 所有电影信息 ==========
肖申克的救赎 (弗兰克·德拉邦特, 1994) 评分:9.7
霸王别姬 (陈凯歌, 1993) 评分:9.6
阿甘正传 (罗伯特·泽米吉斯, 1994) 评分:9.5
泰坦尼克号 (詹姆斯·卡梅隆, 1997) 评分:9.4

========== 评分最高的电影 ==========
肖申克的救赎 (弗兰克·德拉邦特, 1994) 评分:9.7

💡 提示:找评分最高的电影 → 遍历数组,用变量记录最大值及其下标或对象引用。


第 8 题:构造方法 + Random + 方法——猜数游戏(面向对象版)⭐⭐⭐⭐

包名p08_guessgame

将之前的猜数字游戏改造为面向对象版本,使用构造方法初始化游戏。

游戏类(类名自拟,置于 p08_guessgame 包下)

私有属性

属性 类型 说明
target int 目标数字(系统随机生成)
maxRange int 最大范围(如 100 表示 1~100)
attempts int 已猜次数

构造方法类名(int maxRange) —— 在 1 ~ maxRange 之间用 Random 生成目标数字,并将 attempts 初始化为 0

方法

方法 说明
guess(int num) 判断猜测结果,返回 String"猜对了!" / "大了,再小点" / "小了,再大点"
getAttempts() 返回已猜次数(int)

测试类要求(测试类类名自拟,置于 p08_guessgame 包下)

  1. 创建游戏对象,范围 1~100
  2. 使用 Scanner 让用户循环输入猜测数字
  3. 调用 guess() 方法判断,直到猜对为止
  4. 猜对后输出总共猜了多少次

示例运行效果

======= 猜数游戏(1~100) =======
请输入你猜的数字:50
小了,再大点
请输入你猜的数字:75
大了,再小点
请输入你猜的数字:62
小了,再大点
请输入你猜的数字:68
猜对了!
恭喜你!一共猜了 4 次

💡 提示

  • 构造方法中使用 RandomnextInt(maxRange) + 1 生成 1~maxRange 的随机数
  • guess() 方法中每次调用时 attempts 自增 1
  • 测试类中使用 while(true) 循环,猜对时 break

第 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() 查找某本书,输出查找结果

示例数据

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() 比较书名
  • 管理类的方法都是实例方法,测试类中需先创建管理类对象再调用

提交要求

包名规范

题目 包名 说明
第 7 题 p07_movie Movie 电影相关
第 8 题 p08_guessgame GuessGame 猜数游戏
第 9 题 p09_bookmanager BookManager 图书管理

提交目录结构

提交\
└─ 张三\
    ├─ p07_movie\          ← 第 7 题的包
    │   ├─ Movie.java      ← 实体类(类名自拟)
    │   └─ TestMovie.java  ← 测试类(类名自拟)
    ├─ p08_guessgame\       ← 第 8 题的包
    │   ├─ GuessGame.java
    │   └─ GuessGameTest.java
    └─ p09_bookmanager\     ← 第 9 题的包
        ├─ BookV2.java
        ├─ BookManager.java
        └─ BookManagerTest.java

Java 源文件头部注释

/**
 * @author 你的姓名
 * @title 题目X:题目名称
 * @create 2026/7/21
 */

注意

  1. 包名必须全小写,与题目要求完全一致
  2. 每个包下的源文件第一行必须是 package 包名; 声明
  3. 文件名必须与 public class 的类名一致
  4. 三个题目独立完成,不要将所有类写在一个包下