فهرست منبع

feat: 简化20260715课后作业并新增课堂进阶练习题

- 重写课后作业:基础题1~6(动态/静态初始化、索引访问、for遍历)
- 进阶题7~10(遍历求和、最大值、倒序、奇偶统计)改为选做
- 新增 课堂练习题/20260715-数组进阶练习.md
- 将首尾交换、循环右移、去重、双色球、引用类型分析移至课堂练习
WanJL 1 روز پیش
والد
کامیت
dc455d68e4
2فایلهای تغییر یافته به همراه243 افزوده شده و 118 حذف شده
  1. 118 118
      课后作业/2026年7月15日-作业.md
  2. 125 0
      课堂练习题/20260715-数组进阶练习.md

+ 118 - 118
课后作业/2026年7月15日-作业.md

@@ -6,225 +6,225 @@
 
 ---
 
-## 一、基础题(必做)
+## 一、基础题(必做 1~6
 
-### 题目 1:数组遍历与求和
+### 题目 1:动态初始化创建数组
 
 **难度**:⭐  
-**知识点**:数组声明、静态初始化、for 循环遍历
+**知识点**:动态初始化、数组长度
 
-定义一个整数数组,使用静态初始化赋值 `{11, 22, 33, 44, 55}`,然后:
+使用**动态初始化**的方式创建一个 `int` 类型的数组,长度为 5,数组名为 `arr`。
 
-1. 使用 `for` 循环遍历数组,输出每一个元素
-2. 计算数组中所有元素的总和并输出
+**要求**:
+- 使用 `new int[5]` 语法
+- 不需要手动赋值
+- 直接输出这句话:`我已创建了一个长度为5的int数组`
 
-**示例输出**:
-```
-数组元素:11 22 33 44 55
-数组总和:165
+**示例代码框架**:
+```java
+public class Demo_01_姓名 {
+    public static void main(String[] args) {
+        // 在这里写你的代码
+    }
+}
 ```
 
 ---
 
-### 题目 2:查找数组最大值
+### 题目 2:静态初始化创建数组
 
 **难度**:⭐  
-**知识点**:数组遍历、比较运算
+**知识点**:静态初始化
 
-定义一个整数数组 `{3, 8, 1, 9, 4, 7, 2}`,找出数组中的最大值并输出
+使用**静态初始化**的方式创建一个 `int` 类型的数组,数组元素为 `10, 20, 30, 40, 50`,数组名为 `arr`
 
 **要求**:
-- 使用静态初始化赋值
-- 使用 `for` 循环遍历比较
-- 不允许使用 `Arrays` 工具类
+- 使用简写方式 `{ }` 赋值
+- 输出这句话:`数组已创建,元素为:10 20 30 40 50`
 
 **示例输出**:
 ```
-数组元素:3 8 1 9 4 7 2
-最大值:9
+数组已创建,元素为:10 20 30 40 50
 ```
 
 ---
 
-### 题目 3:数组元素倒序输出
+### 题目 3:创建数组并给元素赋值
 
 **难度**:⭐  
-**知识点**:数组遍历、索引操作
+**知识点**:动态初始化、索引赋值
 
-定义一个整数数组 `{1, 2, 3, 4, 5}`,将其倒序输出。
+创建一个长度为 3 的 `int` 类型数组,然后分别为三个元素赋值:
+
+- 第 1 个元素赋值为 `100`
+- 第 2 个元素赋值为 `200`
+- 第 3 个元素赋值为 `300`
 
 **要求**:
-- 不能改变原数组的内容
-- 使用 `for` 循环从后往前遍历
+- 使用 `new int[3]` 动态初始化
+- 使用 `数组名[索引] = 值` 的方式赋值
 
 **示例输出**:
 ```
-原数组: 1 2 3 4 5
-倒序后: 5 4 3 2 1
+第一个元素:100
+第二个元素:200
+第三个元素:300
 ```
 
 ---
 
-## 二、进阶题(必做)
+### 题目 4:输出数组中第 1 个元素
 
-### 题目 4:统计奇偶数个数
+**难度**:⭐  
+**知识点**:索引访问、输出语句
 
-**难度**:⭐⭐  
-**知识点**:数组遍历、if-else 分支、取模运算
+定义一个 `int` 类型数组 `{5, 10, 15, 20, 25}`,使用 `System.out.println` 输出数组中**第 1 个元素**的值。
 
-定义一个整数数组 `{12, 7, 9, 24, 15, 8, 31, 46}`,统计数组中奇数和偶数的个数。
+**要求**:
+- 使用静态初始化
+- 通过索引访问元素(注意索引从几开始)
 
 **示例输出**:
 ```
-数组元素:12 7 9 24 15 8 31 46
-偶数个数:4
-奇数个数:4
+数组中第一个元素的值是:5
 ```
 
+> 💡 **提示**:数组的索引从 `0` 开始,第 1 个元素的索引是 `0`。
+
 ---
 
-### 题目 5:动态初始化与用户输入模拟
+### 题目 5:输出数组中索引为 2 的元素
 
-**难度**:⭐  
-**知识点**:动态初始化、for 循环赋值、数组长度
+**难度**:⭐  
+**知识点**:索引访问
 
-模拟从外部获取 5 个学生的成绩(直接定义在代码中),使用动态初始化创建数组,将成绩存入数组,然后计算平均分
+定义一个 `int` 类型数组 `{7, 14, 21, 28, 35}`,输出数组中**索引为 2** 的那个元素的值
 
 **要求**:
-- 使用 `new int[5]` 动态初始化数组
-- 手动为每个元素赋值(成绩分别为:85, 92, 78, 90, 88)
-- 计算平均分并输出
+- 使用静态初始化
+- 不要搞混"索引"和"第几个"的区别
 
 **示例输出**:
 ```
-学生成绩:85 92 78 90 88
-平均分:86.6
+数组中索引为2的元素的值是:21
 ```
 
+> 💡 **提示**:索引 `2` 对应的是数组中的第 **3** 个元素。想想为什么?
+
 ---
 
-### 题目 6:数组元素交换
+### 题目 6:使用 for 循环遍历数组
 
-**难度**:⭐  
-**知识点**:数组索引操作、变量交换
+**难度**:⭐  
+**知识点**:for 循环、数组遍历、length 属性
 
-定义一个整数数组 `{10, 20, 30, 40, 50}`,将数组中第 1 个元素与第 5 个元素交换,第 2 个元素与第 4 个元素交换(即首尾对称交换),然后输出交换后的数组。
+定义一个 `int` 类型数组 `{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}`,使用 `for` 循环将数组中的每个元素输出到控制台。
+
+**要求**:
+- 循环条件中使用 `arr.length` 获取数组长度
+- 不能在代码中直接写数字 `10`
+- 每个元素输出占一行
 
 **示例输出**:
 ```
-交换前:10 20 30 40 50
-交换后:50 40 30 20 10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
 ```
 
+> 💡 **提示**:`数组名.length` 可以获取数组的长度,比如 `arr.length` 的值就是 `10`。
+
 ---
 
-## 三、挑战题(选做)
+## 二、进阶题(选做 7~10
 
-### 题目 7:数组去重
+### 题目 7:遍历数组并求和
 
-**难度**:⭐⭐  
-**知识点**:数组遍历、嵌套循环、if 判断、新数组
+**难度**:⭐⭐  
+**知识点**:数组遍历、累加求和
 
-定义一个整数数组 `{5, 2, 8, 2, 5, 9, 1, 8, 3}`,去除数组中重复的元素,只保留第一次出现的元素,输出去重后的新数组。
-
-**要求**:
-- 不能使用 `Set` 等集合类
-- 只能使用数组和循环实现
-- 去重后的元素顺序保持原顺序
+定义一个整数数组 `{11, 22, 33, 44, 55}`,使用 `for` 循环遍历数组,计算所有元素的总和并输出。
 
 **示例输出**:
 ```
-原数组:   5 2 8 2 5 9 1 8 3
-去重后:   5 2 8 9 1 3
+数组元素:11 22 33 44 55
+数组总和:165
 ```
 
-**提示**:
-- 可以先统计不重复元素的个数,再创建新数组
-- 或者创建一个足够大的新数组,遍历原数组判断是否已存在
-
 ---
 
-### 题目 8:数组元素右移
+### 题目 8:查找数组最大值
 
-**难度**:⭐⭐⭐  
-**知识点**:数组操作、循环、下标运算
+**难度**:⭐⭐  
+**知识点**:数组遍历、比较运算
+
+定义一个整数数组 `{3, 8, 1, 9, 4, 7, 2}`,找出数组中的最大值并输出。
 
-定义一个整数数组 `{1, 2, 3, 4, 5}`,将数组中的所有元素向右移动 2 个位置。超出数组范围的元素循环移到数组开头(循环右移)。
+**要求**:
+- 使用 `for` 循环遍历比较
+- 先假设第 1 个元素是最大值,然后依次跟后面的元素比较
 
-**示例**:
+**示例输出**:
 ```
-移动前:1 2 3 4 5
-右移2位:4 5 1 2 3
+数组元素:3 8 1 9 4 7 2
+最大值:9
 ```
 
-**要求**:
-- 在原数组上操作,不创建新数组
-- 移动位数用一个变量 `k = 2` 控制
-- 思考:如果 k 大于数组长度怎么办?(提示:`k = k % 数组长度`)
+> 💡 **提示**:可以定义一个变量 `max`,初始值为数组第一个元素,然后遍历数组,遇到更大的就更新 `max`。
 
 ---
 
-### 题目 9:双色球号码生成器
+### 题目 9:数组元素倒序输出
 
-**难度**:⭐⭐⭐⭐  
-**知识点**:数组、随机数、嵌套循环、去重
-
-模拟双色球彩票号码生成:
+**难度**:⭐⭐  
+**知识点**:数组遍历、索引逆向操作
 
-**规则**:
-1. 红球:从 1~33 中随机选出 **6 个不重复** 的号码
-2. 蓝球:从 1~16 中随机选出 **1 个** 号码
+定义一个整数数组 `{1, 2, 3, 4, 5}`,从后往前遍历数组,将元素倒序输出。
 
 **要求**:
-- 红球号码存入一个 int 数组
-- 蓝球号码单独用一个 int 变量存储
-- 红球号码不能重复(每次生成新号码时,需要检查是否已存在)
-- 输出格式参考如下
+- 使用 `for` 循环,从 `arr.length - 1` 开始,到 `0` 结束
+- 不能改变原数组的内容
 
 **示例输出**:
 ```
-红球号码:05 12 18 23 27 31
-蓝球号码:09
+原数组: 1 2 3 4 5
+倒序后: 5 4 3 2 1
 ```
 
-**提示**:
-```java
-// 生成 1~33 之间的随机整数
-int num = (int)(Math.random() * 33) + 1;
-```
+> 💡 **提示**:最后一个元素的索引是 `arr.length - 1`,想想循环的起始值和结束条件怎么写。
 
 ---
 
-## 四、思考题(选做)
+### 题目 10:统计奇偶数个数
 
-### 题目 10:数组 vs 基本数据类型
+**难度**:⭐⭐  
+**知识点**:数组遍历、if-else 分支、取模运算
 
-**难度**:⭐  
-**知识点**:基本数据类型 vs 引用数据类型
+定义一个整数数组 `{12, 7, 9, 24, 15, 8, 31, 46}`,遍历数组,统计其中奇数和偶数的个数。
 
-```java
-public class ThinkDemo {
-    public static void main(String[] args) {
-        int a = 10;
-        int b = a;
-        b = 20;
-        System.out.println("a = " + a);     // ?
-        System.out.println("b = " + b);     // ?
-
-        int[] arr1 = {1, 2, 3};
-        int[] arr2 = arr1;
-        arr2[0] = 999;
-        System.out.println("arr1[0] = " + arr1[0]);   // ?
-        System.out.println("arr2[0] = " + arr2[0]);   // ?
-    }
-}
+**要求**:
+- 使用 `%` 运算符判断奇偶
+- 定义两个变量分别计数
+
+**示例输出**:
+```
+数组元素:12 7 9 24 15 8 31 46
+偶数个数:4
+奇数个数:4
 ```
 
-请问以上代码的运行结果是什么?为什么 `arr1[0]` 的值会被改变?结合课堂笔记中"基本数据类型 vs 引用数据类型"的知识,在注释中写出你的分析
+> 💡 **提示**:`n % 2 == 0` 表示偶数,`n % 2 == 1` 表示奇数。
 
 ---
 
-## 、提交要求
+## 三、提交要求
 
 1. 在 `提交` 文件夹下创建【以你名字命名】的文件夹,然后复制 Java 源文件
 2. 每个题目一个文件,命名格式:`Demo_题目编号_姓名.java`
@@ -238,5 +238,5 @@ public class ThinkDemo {
     */
    ```
 4. 代码整洁,有必要的注释
-5. 基础题`(1~3)`和进阶题`(4~6)`为**必做**
-6. 挑战题`(7~9)`和思考题`(10)`为**选做**,学有余力的同学尝试完成
+5. 基础题(1~6)为**必做**
+6. 进阶题(7~10)为**选做**,学有余力的同学尝试完成

+ 125 - 0
课堂练习题/20260715-数组进阶练习.md

@@ -0,0 +1,125 @@
+# 2026-07-15 数组进阶练习(课堂练习用)
+
+> **说明**:以下题目为数组的进阶应用,作为课堂练习或学有余力的同学额外挑战使用。
+
+---
+
+### 练习 1:数组元素首尾交换
+
+**难度**:⭐⭐  
+**知识点**:数组索引操作、变量交换
+
+定义一个整数数组 `{10, 20, 30, 40, 50}`,将数组中第 1 个元素与第 5 个元素交换,第 2 个元素与第 4 个元素交换(即首尾对称交换),然后输出交换后的数组。
+
+**示例输出**:
+```
+交换前:10 20 30 40 50
+交换后:50 40 30 20 10
+```
+
+> **提示**:可以用变量交换的经典三步法 `temp = a; a = b; b = temp;`。
+
+---
+
+### 练习 2:数组元素循环右移
+
+**难度**:⭐⭐⭐  
+**知识点**:数组操作、循环、下标运算
+
+定义一个整数数组 `{1, 2, 3, 4, 5}`,将数组中的所有元素向右移动 2 个位置。超出数组范围的元素循环移到数组开头(循环右移)。
+
+**示例**:
+```
+移动前:1 2 3 4 5
+右移2位:4 5 1 2 3
+```
+
+**要求**:
+- 在原数组上操作,不创建新数组
+- 移动位数用一个变量 `k = 2` 控制
+- 思考:如果 k 大于数组长度怎么办?(提示:`k = k % 数组长度`)
+
+---
+
+### 练习 3:数组去重
+
+**难度**:⭐⭐⭐  
+**知识点**:数组遍历、嵌套循环、if 判断、新数组
+
+定义一个整数数组 `{5, 2, 8, 2, 5, 9, 1, 8, 3}`,去除数组中重复的元素,只保留第一次出现的元素,输出去重后的新数组。
+
+**要求**:
+- 不能使用 `Set` 等集合类
+- 只能使用数组和循环实现
+- 去重后的元素顺序保持原顺序
+
+**示例输出**:
+```
+原数组:   5 2 8 2 5 9 1 8 3
+去重后:   5 2 8 9 1 3
+```
+
+**提示**:
+- 可以先统计不重复元素的个数,再创建新数组
+- 或者创建一个足够大的新数组,遍历原数组判断是否已存在
+
+---
+
+### 练习 4:双色球号码生成器
+
+**难度**:⭐⭐⭐⭐  
+**知识点**:数组、随机数、嵌套循环、去重
+
+模拟双色球彩票号码生成:
+
+**规则**:
+1. 红球:从 1~33 中随机选出 **6 个不重复** 的号码
+2. 蓝球:从 1~16 中随机选出 **1 个** 号码
+
+**要求**:
+- 红球号码存入一个 int 数组
+- 蓝球号码单独用一个 int 变量存储
+- 红球号码不能重复(每次生成新号码时,需要检查是否已存在)
+
+**示例输出**:
+```
+红球号码:05 12 18 23 27 31
+蓝球号码:09
+```
+
+**提示**:
+```java
+// 生成 1~33 之间的随机整数
+int num = (int)(Math.random() * 33) + 1;
+```
+
+---
+
+### 练习 5:基本类型 vs 引用类型(代码分析)
+
+**难度**:⭐⭐  
+**知识点**:基本数据类型 vs 引用数据类型
+
+```java
+public class ThinkDemo {
+    public static void main(String[] args) {
+        int a = 10;
+        int b = a;
+        b = 20;
+        System.out.println("a = " + a);     // ?
+        System.out.println("b = " + b);     // ?
+
+        int[] arr1 = {1, 2, 3};
+        int[] arr2 = arr1;
+        arr2[0] = 999;
+        System.out.println("arr1[0] = " + arr1[0]);   // ?
+        System.out.println("arr2[0] = " + arr2[0]);   // ?
+    }
+}
+```
+
+请问以上代码的运行结果是什么?为什么 `arr1[0]` 的值会被改变?结合课堂笔记中"基本数据类型 vs 引用数据类型"的知识,在注释中写出你的分析。
+
+---
+
+> **参考笔记**:[20260715-笔记.md](../课堂笔记/01-JavaSE基础-笔记/20260715-笔记.md) 第三章「数组(Array)」