2026年7月16日-作业.md 7.8 KB

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]

示例代码框架

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

示例代码框架

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

示例代码框架

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. 文件头部使用文档注释,包含:

    /**
    * @author 你的姓名
    * @title 题目X:题目名称
    * @create 2026/7/16
    */
    
  4. 代码整洁,有必要的注释

  5. 基础题(1~3)为必做

  6. 进阶题(4)为选做,鼓励所有同学尝试完成