|
|
@@ -0,0 +1,242 @@
|
|
|
+# 2026-07-15 JavaSE 课后作业
|
|
|
+
|
|
|
+> **课程内容**:switch 分支语句、循环结构、循环控制语句、嵌套循环、数组
|
|
|
+> **提交方式**:在 `提交\姓名\` 目录下创建对应的 Java 源文件
|
|
|
+> **截止时间**:下次上课前
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 一、基础题(必做)
|
|
|
+
|
|
|
+### 题目 1:数组遍历与求和
|
|
|
+
|
|
|
+**难度**:⭐
|
|
|
+**知识点**:数组声明、静态初始化、for 循环遍历
|
|
|
+
|
|
|
+定义一个整数数组,使用静态初始化赋值 `{11, 22, 33, 44, 55}`,然后:
|
|
|
+
|
|
|
+1. 使用 `for` 循环遍历数组,输出每一个元素
|
|
|
+2. 计算数组中所有元素的总和并输出
|
|
|
+
|
|
|
+**示例输出**:
|
|
|
+```
|
|
|
+数组元素:11 22 33 44 55
|
|
|
+数组总和:165
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 题目 2:查找数组最大值
|
|
|
+
|
|
|
+**难度**:⭐
|
|
|
+**知识点**:数组遍历、比较运算
|
|
|
+
|
|
|
+定义一个整数数组 `{3, 8, 1, 9, 4, 7, 2}`,找出数组中的最大值并输出。
|
|
|
+
|
|
|
+**要求**:
|
|
|
+- 使用静态初始化赋值
|
|
|
+- 使用 `for` 循环遍历比较
|
|
|
+- 不允许使用 `Arrays` 工具类
|
|
|
+
|
|
|
+**示例输出**:
|
|
|
+```
|
|
|
+数组元素:3 8 1 9 4 7 2
|
|
|
+最大值:9
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 题目 3:数组元素倒序输出
|
|
|
+
|
|
|
+**难度**:⭐
|
|
|
+**知识点**:数组遍历、索引操作
|
|
|
+
|
|
|
+定义一个整数数组 `{1, 2, 3, 4, 5}`,将其倒序输出。
|
|
|
+
|
|
|
+**要求**:
|
|
|
+- 不能改变原数组的内容
|
|
|
+- 使用 `for` 循环从后往前遍历
|
|
|
+
|
|
|
+**示例输出**:
|
|
|
+```
|
|
|
+原数组: 1 2 3 4 5
|
|
|
+倒序后: 5 4 3 2 1
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、进阶题(必做)
|
|
|
+
|
|
|
+### 题目 4:统计奇偶数个数
|
|
|
+
|
|
|
+**难度**:⭐⭐
|
|
|
+**知识点**:数组遍历、if-else 分支、取模运算
|
|
|
+
|
|
|
+定义一个整数数组 `{12, 7, 9, 24, 15, 8, 31, 46}`,统计数组中奇数和偶数的个数。
|
|
|
+
|
|
|
+**示例输出**:
|
|
|
+```
|
|
|
+数组元素:12 7 9 24 15 8 31 46
|
|
|
+偶数个数:4
|
|
|
+奇数个数:4
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 题目 5:动态初始化与用户输入模拟
|
|
|
+
|
|
|
+**难度**:⭐⭐
|
|
|
+**知识点**:动态初始化、for 循环赋值、数组长度
|
|
|
+
|
|
|
+模拟从外部获取 5 个学生的成绩(直接定义在代码中),使用动态初始化创建数组,将成绩存入数组,然后计算平均分。
|
|
|
+
|
|
|
+**要求**:
|
|
|
+- 使用 `new int[5]` 动态初始化数组
|
|
|
+- 手动为每个元素赋值(成绩分别为:85, 92, 78, 90, 88)
|
|
|
+- 计算平均分并输出
|
|
|
+
|
|
|
+**示例输出**:
|
|
|
+```
|
|
|
+学生成绩:85 92 78 90 88
|
|
|
+平均分:86.6
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 题目 6:数组元素交换
|
|
|
+
|
|
|
+**难度**:⭐⭐
|
|
|
+**知识点**:数组索引操作、变量交换
|
|
|
+
|
|
|
+定义一个整数数组 `{10, 20, 30, 40, 50}`,将数组中第 1 个元素与第 5 个元素交换,第 2 个元素与第 4 个元素交换(即首尾对称交换),然后输出交换后的数组。
|
|
|
+
|
|
|
+**示例输出**:
|
|
|
+```
|
|
|
+交换前:10 20 30 40 50
|
|
|
+交换后:50 40 30 20 10
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、挑战题(选做)
|
|
|
+
|
|
|
+### 题目 7:数组去重
|
|
|
+
|
|
|
+**难度**:⭐⭐⭐
|
|
|
+**知识点**:数组遍历、嵌套循环、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
|
|
|
+```
|
|
|
+
|
|
|
+**提示**:
|
|
|
+- 可以先统计不重复元素的个数,再创建新数组
|
|
|
+- 或者创建一个足够大的新数组,遍历原数组判断是否已存在
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 题目 8:数组元素右移
|
|
|
+
|
|
|
+**难度**:⭐⭐⭐
|
|
|
+**知识点**:数组操作、循环、下标运算
|
|
|
+
|
|
|
+定义一个整数数组 `{1, 2, 3, 4, 5}`,将数组中的所有元素向右移动 2 个位置。超出数组范围的元素循环移到数组开头(循环右移)。
|
|
|
+
|
|
|
+**示例**:
|
|
|
+```
|
|
|
+移动前:1 2 3 4 5
|
|
|
+右移2位:4 5 1 2 3
|
|
|
+```
|
|
|
+
|
|
|
+**要求**:
|
|
|
+- 在原数组上操作,不创建新数组
|
|
|
+- 移动位数用一个变量 `k = 2` 控制
|
|
|
+- 思考:如果 k 大于数组长度怎么办?(提示:`k = k % 数组长度`)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 题目 9:双色球号码生成器
|
|
|
+
|
|
|
+**难度**:⭐⭐⭐⭐
|
|
|
+**知识点**:数组、随机数、嵌套循环、去重
|
|
|
+
|
|
|
+模拟双色球彩票号码生成:
|
|
|
+
|
|
|
+**规则**:
|
|
|
+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;
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、思考题(选做)
|
|
|
+
|
|
|
+### 题目 10:数组 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 引用数据类型"的知识,在注释中写出你的分析。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、提交要求
|
|
|
+
|
|
|
+1. 在 `提交` 文件夹下创建【以你名字命名】的文件夹,然后复制 Java 源文件
|
|
|
+2. 每个题目一个文件,命名格式:`Demo_题目编号_姓名.java`
|
|
|
+ - 例如:`Demo_01_张三.java`
|
|
|
+3. 文件头部使用文档注释,包含:
|
|
|
+ ```java
|
|
|
+ /**
|
|
|
+ * @author 你的姓名
|
|
|
+ * @title 题目X:题目名称
|
|
|
+ * @create 2026/7/15
|
|
|
+ */
|
|
|
+ ```
|
|
|
+4. 代码整洁,有必要的注释
|
|
|
+5. 基础题`(1~3)`和进阶题`(4~6)`为**必做**
|
|
|
+6. 挑战题`(7~9)`和思考题`(10)`为**选做**,学有余力的同学尝试完成
|