# 2026-07-16 JavaSE 课后作业 > **课程内容**:多维数组、增强 for 循环(foreach)、Arrays 数组工具类、冒泡排序、选择排序、插入排序、Scanner 键盘输入 > **提交方式**:在 `提交\姓名\` 目录下创建对应的 Java 源文件 > **截止时间**:下次上课前 --- ## 一、基础题(必做) ### 题目 1:冒泡排序 — 数组升序排列 **难度**:⭐⭐⭐ **知识点**:冒泡排序、嵌套循环、数组遍历、变量交换 定义整数数组 `{29, 10, 14, 37, 13, 33, 48, 22}`,使用**冒泡排序**算法将数组按升序(从小到大)排列。 **要求**: - 必须使用冒泡排序算法(相邻元素两两比较,大的往后冒) - 使用 `for` 循环嵌套实现 - 排序后使用 `Arrays.toString()` 输出结果 - 输出排序前和排序后的数组对比 **示例输出**: ``` 排序前:[29, 10, 14, 37, 13, 33, 48, 22] 排序后:[10, 13, 14, 22, 29, 33, 37, 48] ``` **示例代码框架**: ```java import java.util.Arrays; /** * @author 你的姓名 * @title 题目1:冒泡排序 * @create 2026/7/16 */ public class Demo_01_姓名 { public static void main(String[] args) { int[] arr = {29, 10, 14, 37, 13, 33, 48, 22}; System.out.println("排序前:" + Arrays.toString(arr)); // 冒泡排序代码写在这里 System.out.println("排序后:" + Arrays.toString(arr)); } } ``` > 💡 **提示**: > - 外层循环控制冒泡轮数,共 `arr.length - 1` 轮 > - 内层循环在 `[0, arr.length-1-i]` 区间相邻比较 > - 前一个比后一个大就交换 --- ### 题目 2:选择排序 — 数组降序排列 **难度**:⭐⭐⭐ **知识点**:选择排序、嵌套循环、数组遍历 定义整数数组 `{56, 23, 89, 12, 45, 67, 34, 78}`,使用**选择排序**算法将数组按**降序**(从大到小)排列。 **要求**: - 必须使用选择排序算法(每轮选一个最值交换) - 要按**降序**排列,选择排序要找的是最大值还是最小值? - 排序后使用 `for` 循环遍历输出(不要用 `Arrays.toString()`) - 输出排序前和排序后的数组 **示例输出**: ``` 排序前:56 23 89 12 45 67 34 78 排序后:89 78 67 56 45 34 23 12 ``` **示例代码框架**: ```java import java.util.Arrays; /** * @author 你的姓名 * @title 题目2:选择排序(降序) * @create 2026/7/16 */ public class Demo_02_姓名 { public static void main(String[] args) { int[] arr = {56, 23, 89, 12, 45, 67, 34, 78}; System.out.print("排序前:"); // 用 for 循环遍历输出 // 选择排序代码写在这里(降序) System.out.print("排序后:"); // 用 for 循环遍历输出 } } ``` > 💡 **提示**: > - 降序排列:每轮从剩余未排序元素中选出**最大值**,放到未排序部分的第 1 位 > - 回忆课堂代码中的选择排序是升序(找最小值),降序只需要改成找最大值即可 > - `minIndex` 改名为 `maxIndex`,比较条件从 `<` 改为 `>` --- ### 题目 3:插入排序 — 成绩排名 **难度**:⭐⭐⭐ **知识点**:插入排序、数组遍历、字符串拼接 有一个整数数组 `{88, 72, 93, 65, 81, 97, 78, 85}` 表示 8 名学生的考试成绩。使用**插入排序**算法将成绩按**升序**(从低分到高分)排列。 **要求**: - 必须使用插入排序算法 - 每轮插入后,输出当前轮的排序中间结果(参考课堂代码) - 排序完成后,分别输出最低分和最高分 **示例输出**: ``` 第1轮插入后:[72, 88, 93, 65, 81, 97, 78, 85] 第2轮插入后:[72, 88, 93, 65, 81, 97, 78, 85] 第3轮插入后:[65, 72, 88, 93, 81, 97, 78, 85] 第4轮插入后:[65, 72, 81, 88, 93, 97, 78, 85] 第5轮插入后:[65, 72, 81, 88, 93, 97, 78, 85] 第6轮插入后:[65, 72, 78, 81, 88, 93, 97, 85] 第7轮插入后:[65, 72, 78, 81, 85, 88, 93, 97] 排序完成! 最低分:65 最高分:97 ``` **示例代码框架**: ```java import java.util.Arrays; /** * @author 你的姓名 * @title 题目3:插入排序-成绩排名 * @create 2026/7/16 */ public class Demo_03_姓名 { public static void main(String[] args) { int[] scores = {88, 72, 93, 65, 81, 97, 78, 85}; System.out.println("原始成绩:" + Arrays.toString(scores)); // 插入排序代码写在这里 // 每轮插入后输出:System.out.println("第" + i + "轮插入后:" + Arrays.toString(scores)); System.out.println("排序完成!"); // 输出最低分和最高分 } } ``` > 💡 **提示**: > - 插入排序将数组分为"已排序"和"未排序"两部分 > - 从索引 `1` 开始,每次取未排序的第 1 个元素插入到已排序部分的正确位置 > - 内层使用 `while` 循环从后往前扫描,比当前元素大的就后移 --- ## 二、进阶题(选做) ### 题目 4:Scanner 学生信息采集系统 **难度**:⭐⭐⭐⭐ **知识点**:Scanner 键盘输入、数据类型、字符串拼接、条件判断 使用 `Scanner` 实现一个**学生信息采集系统**,要求用户输入以下信息: | 信息项 | 数据类型 | 提示语 | |--------|---------|--------| | 姓名 | String | `请输入您的姓名:` | | 学号 | String | `请输入您的学号:` | | 年龄 | int | `请输入您的年龄:` | | 性别 | String | `请输入您的性别(男/女):` | | 身高(米) | double | `请输入您的身高(米):` | | 体重(公斤) | double | `请输入您的体重(公斤):` | | 是否在校(true/false) | boolean | `请输入您是否在校(true/false):` | **要求**: 1. 使用 `Scanner` 依次读取上述所有信息 2. 计算 BMI 指数:`BMI = 体重 ÷ (身高 × 身高)` 3. 根据 BMI 判断体型(参考中国标准): - `BMI < 18.5` → `偏瘦` - `18.5 ≤ BMI < 24` → `正常` - `24 ≤ BMI < 28` → `偏胖` - `BMI ≥ 28` → `肥胖` 4. 最后将收集到的所有信息格式化输出(见示例输出) 5. 注意 `nextInt()` / `nextDouble()` 与 `nextLine()` 混用时的**换行符陷阱** **示例输出**: ``` ======== 学生信息采集系统 ======== 请输入您的姓名:张三 请输入您的学号:2024001 请输入您的年龄:20 请输入您的性别(男/女):男 请输入您的身高(米):1.75 请输入您的体重(公斤):70 请输入您是否在校(true/false):true ======== 学生信息卡 ======== 姓名:张三 学号:2024001 年龄:20 性别:男 身高:1.75 米 体重:70.0 公斤 在校学生:true BMI:22.86 体型判定:正常 ============================ ``` > 💡 **提示**: > - BMI 计算公式:`weight / (height * height)` > - BMI 结果保留两位小数可以使用:`System.out.printf("%.2f", bmi);` > - 或者使用 `String.format("%.2f", bmi)` 格式化字符串 > - 也可以直接用 `Math.round(bmi * 100) / 100.0` 实现四舍五入保留两位小数 > - 使用 `if-else if` 多分支判断 BMI 所属区间 **进阶挑战(学有余力的同学尝试)**: - 增加对性别的输入校验:如果既不是"男"也不是"女",提示重新输入 - 增加对年龄的范围校验:年龄必须在 0~120 之间 - 输出"体型判定"时,使用 `switch` 增强表达式(箭头语法)实现 --- ## 三、提交要求 1. 在 `提交` 文件夹下创建【以你名字命名】的文件夹,然后复制 Java 源文件 2. 每个题目一个文件,命名格式:`Demo_题目编号_姓名.java` - 例如:`Demo_01_张三.java` 3. 文件头部使用文档注释,包含: ```java /** * @author 你的姓名 * @title 题目X:题目名称 * @create 2026/7/16 */ ``` 4. 代码整洁,有必要的注释 5. **基础题(1~3)为必做** 6. **进阶题(4)为选做**,鼓励所有同学尝试完成