Просмотр исходного кода

docs: 更新README,新增课后作业板块与7月21日构造方法作业

WanJL 17 часов назад
Родитель
Сommit
2166d81963
2 измененных файлов с 281 добавлено и 0 удалено
  1. 16 0
      README.md
  2. 265 0
      课后作业/2026年7月21日-作业.md

+ 16 - 0
README.md

@@ -54,3 +54,19 @@
 | 2026-07-20 | [面向对象基础练习](./课堂练习题/20260720-面向对象基础练习.md) | 类与对象、封装、包、方法、数组、Random 综合
 | 2026-07-21 | [构造方法练习](./课堂练习题/20260721-构造方法练习.md) | 构造方法概念、构造方法重载、private 构造方法、this() 构造方法间调用、构造方法+对象数组+排序+Random 综合 |
 
+## 四、课后作业
+
+| 日期 | 作业 | 涵盖知识点 |
+|------|------|-----------|
+| 2026-07-14 | [Java 基础入门作业](./课后作业/2026年7月14日-作业.md) | 数据类型、运算符、流程控制 |
+| 2026-07-15 | [数组练习作业](./课后作业/2026年7月15日-作业.md) | 数组创建、遍历、排序算法 |
+| 2026-07-16 | [数组与排序作业](./课后作业/2026年7月16日-作业.md) | 多维数组、Arrays工具类、三种排序算法 |
+| 2026-07-17 | [方法基础作业](./课后作业/2026年7月17日-作业.md) | 方法4种声明方式、方法调用、数组作为方法参数 |
+| 2026-07-20 | [面向对象基础作业](./课后作业/2026年7月20日-作业.md) | 类与对象、封装、对象数组、包(Package) |
+| 2026-07-21 | [构造方法练习作业](./课后作业/2026年7月21日-作业.md) | 构造方法+对象数组、构造方法+Random、构造方法+封装+排序 |
+
+## 五、学生作业
+
+> 学生提交的作业源码(子模块引用),详见 [`./学生作业`](./学生作业/) 目录。
+>
+> 当前子模块:`https://github.com/TeacherWanJL/J260713-Student.git`(`main` 分支)

+ 265 - 0
课后作业/2026年7月21日-作业.md

@@ -0,0 +1,265 @@
+# 2026-07-21 JavaSE 课后作业
+
+> **课程内容**:构造方法(构造器)—— 无参构造、有参构造、构造方法重载、this() 调用、封装综合应用
+>
+> **涉及前序知识**:封装、对象数组、Random、Scanner、冒泡排序、数组遍历
+>
+> **提交方式**:在 `提交\姓名\` 目录下创建对应的 Java 源文件
+>
+> **截止时间**:下次上课前
+
+---
+
+## 📌 本次作业重要说明
+
+### 命名要求变更
+
+与以往作业不同,本次作业**不再要求类名按指定格式命名**,而是要求**包名按指定格式命名**。
+
+| 变化 | 之前的要求 | 本次的要求 |
+|------|-----------|-----------|
+| 类名 | 必须按 `Demo_XX_姓名` 格式命名 | 自由命名(见下文要求) |
+| 包名 | 不要求(默认包) | **必须按指定包名创建** |
+| 文件名 | 必须与类名一致 | 与类名一致即可 |
+
+### 具体要求
+
+1. **每个题目对应一个独立的包**,包名在题目中已指定
+2. 每个包下包含该题所需的所有类(实体类 + 测试类)
+3. 类名**自由命名**,但需**见名知意**(如实体类用 `Movie`、`GuessGame`、`BookV2` 等均可)
+4. 测试类建议命名为 `TestXxx` 或 `XxxTest`(如 `TestMovie`、`GuessGameTest`)
+5. 每个 Java 源文件顶部需包含以下注释模板:
+
+```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 次
+```
+
+> 💡 **提示**:
+> - 构造方法中使用 `Random` 的 `nextInt(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()` 查找某本书,输出查找结果
+
+**示例数据**:
+```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()` 比较书名
+> - 管理类的方法都是**实例方法**,测试类中需先创建管理类对象再调用
+
+---
+
+## 提交要求
+
+### 包名规范
+
+| 题目 | 包名 | 说明 |
+|------|------|------|
+| 第 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 源文件头部注释
+
+```java
+/**
+ * @author 你的姓名
+ * @title 题目X:题目名称
+ * @create 2026/7/21
+ */
+```
+
+> ⚠ **注意**:
+> 1. 包名必须**全小写**,与题目要求完全一致
+> 2. 每个包下的源文件第一行必须是 `package 包名;` 声明
+> 3. 文件名必须与 `public class` 的类名一致
+> 4. 三个题目独立完成,不要将所有类写在一个包下