2026年7月17日-作业.md 14 KB

2026-07-17 JavaSE 课后作业

课程内容:Java 方法 4 种声明方式(无参无返回值 / 有参无返回值 / 有参有返回值 / 无参有返回值)、方法中调用方法、数组作为方法参数、Random 随机数类
提交方式:在 提交\姓名\ 目录下创建对应的 Java 源文件
截止时间:下次上课前


一、基础题(必做 · 方法声明与调用)

题目 1:无参无返回值 — 打印个人信息卡片

难度:⭐
知识点:第 1 种方法(无参无返回值)

定义一个方法 printInfoCard,调用后在控制台打印如下格式的信息卡片(内容可自定义):

╔══════════════════════╗
║      个人信息卡       ║
╠══════════════════════╣
║  姓名:张三           ║
║  班级:J260713        ║
║   motto:好好学习!    ║
╚══════════════════════╝

要求

  • 方法类型:无参数、无返回值
  • main 方法中直接调用

示例代码框架

/**
 * @author 你的姓名
 * @title 题目1:打印个人信息卡片
 * @create 2026/7/17
 */
public class Demo_01_姓名 {
    public static void printInfoCard() {
        // 打印个人信息卡片
    }

    public static void main(String[] args) {
        printInfoCard();
    }
}

💡 提示System.out.println() 逐行打印,可以用特殊符号(╔ ╗ ║ ╚ ╝ ═ ╣)装饰边框。


题目 2:有参无返回值 — 打印 n 行倒直角三角形

难度:⭐⭐
知识点:第 2 种方法(有参无返回值)、嵌套循环

定义一个方法 printInvertedTriangle,接收一个整数参数 n,打印 n 行的倒直角三角形(由 * 组成)。

示例

调用:printInvertedTriangle(5)
输出:
*****
****
***
**
*

要求

  • 方法类型:有参数(int n)、无返回值
  • main 方法中分别调用 printInvertedTriangle(5)printInvertedTriangle(3) 测试

示例代码框架

/**
 * @author 你的姓名
 * @title 题目2:打印倒直角三角形
 * @create 2026/7/17
 */
public class Demo_02_姓名 {
    public static void printInvertedTriangle(int n) {
        // 嵌套循环打印倒直角三角形
    }

    public static void main(String[] args) {
        printInvertedTriangle(5);
        System.out.println();  // 两图之间空一行
        printInvertedTriangle(3);
    }
}

💡 提示:第 i 行打印 n - i*,外层循环从 n 递减到 1


题目 3:有参有返回值 — 计算平均数

难度:⭐⭐
知识点:第 3 种方法(有参有返回值)、数组遍历

定义一个方法 average,接收一个 int[] 数组参数,计算并返回数组中所有元素的平均值(double 类型)。

示例

调用:average({80, 90, 100, 70, 85})
返回:85.0

调用:average({60, 75, 80})
返回:71.66666666666667

要求

  • 方法类型:有参数(int[] 数组)、有返回值(double)
  • main 方法中创建测试数组并调用 average 方法输出结果

示例代码框架

/**
 * @author 你的姓名
 * @title 题目3:计算数组平均值
 * @create 2026/7/17
 */
public class Demo_03_姓名 {
    public static double average(int[] arr) {
        // 计算平均值
    }

    public static void main(String[] args) {
        int[] scores = {80, 90, 100, 70, 85};
        double avg = average(scores);
        System.out.println("平均分:" + avg);
    }
}

💡 提示:先求和再除以数组长度 arr.length,注意整数除法会丢失小数。


题目 4:无参有返回值 — 获取当前时间问候语

难度:⭐⭐
知识点:第 4 种方法(无参有返回值)、条件判断

定义一个方法 getGreeting,根据当前系统时间返回对应的问候语字符串:

  • 6:00 ~ 11:59 → "上午好"
  • 12:00 ~ 17:59 → "下午好"
  • 18:00 ~ 23:59 → "晚上好"
  • 0:00 ~ 5:59 → "夜深了,注意休息"

示例(假设现在下午 3 点):

调用:getGreeting()
返回:"下午好"

要求

  • 方法类型:无参数、有返回值(String)
  • 使用 java.time.LocalTime.now().getHour() 获取当前小时数
  • main 方法中调用并拼接输出完整语句

示例代码框架

import java.time.LocalTime;

/**
 * @author 你的姓名
 * @title 题目4:获取问候语
 * @create 2026/7/17
 */
public class Demo_04_姓名 {
    public static String getGreeting() {
        int hour = LocalTime.now().getHour();
        // 根据 hour 返回对应的问候语
    }

    public static void main(String[] args) {
        String greeting = getGreeting();
        System.out.println("亲爱的同学," + greeting + "!");
    }
}

题目 5:方法中调用方法 — 摄氏温度转华氏温度

难度:⭐⭐
知识点:方法中调用另一个方法

现实生活中不同国家使用不同的温度单位,我国使用摄氏度(℃),美国等国家使用华氏度(℉)

要求按如下层次定义方法:

方法 类型 说明
celsiusToFahrenheit(double c) 有参有返回值 将摄氏度转为华氏度:℉ = ℃ × 9/5 + 32
fahrenheitToCelsius(double f) 有参有返回值 将华氏度转为摄氏度:℃ = (℉ - 32) × 5/9
printTemperature(double c) 有参无返回值 调用上面两个方法,输出摄氏度与华氏度的对照

示例

调用:printTemperature(25.0)
输出:
摄氏温度:25.00℃
华氏温度:77.00℉

示例代码框架

/**
 * @author 你的姓名
 * @title 题目5:温度转换
 * @create 2026/7/17
 */
public class Demo_05_姓名 {
    public static double celsiusToFahrenheit(double c) {
        return c * 9.0 / 5.0 + 32.0;
    }

    public static double fahrenheitToCelsius(double f) {
        return (f - 32.0) * 5.0 / 9.0;
    }

    public static void printTemperature(double c) {
        // 调用 celsiusToFahrenheit() 方法
        // 格式化输出摄氏度和华氏度(保留2位小数)
    }

    public static void main(String[] args) {
        printTemperature(25.0);
        printTemperature(100.0);
        printTemperature(0.0);
    }
}

💡 提示:可以使用 System.out.printf("%.2f", 数值) 保留两位小数;摄氏度符号用 、华氏度用


二、进阶题(必做 · 综合应用)

题目 6:数组作为方法参数 — 冒泡排序方法封装

难度:⭐⭐⭐
知识点:数组作为方法参数、冒泡排序、Arrays.toString()

将冒泡排序封装为一个独立的方法 bubbleSort,接收 int[] 数组参数,在方法内部完成排序并打印结果。

要求

  • 定义一个方法 bubbleSort(int[] arr) — 按升序排序(从小到大)
  • 方法内部使用 Arrays.toString() 输出排序前和排序后的数组
  • main 方法中测试以下两个数组:
    • {64, 34, 25, 12, 22, 11, 90}
    • {5, 1, 4, 2, 8}

示例输出

测试数组1:
排序前:[64, 34, 25, 12, 22, 11, 90]
排序后:[11, 12, 22, 25, 34, 64, 90]

测试数组2:
排序前:[5, 1, 4, 2, 8]
排序后:[1, 2, 4, 5, 8]

示例代码框架

import java.util.Arrays;

/**
 * @author 你的姓名
 * @title 题目6:冒泡排序方法封装
 * @create 2026/7/17
 */
public class Demo_06_姓名 {
    public static void bubbleSort(int[] arr) {
        System.out.println("排序前:" + Arrays.toString(arr));
        // 冒泡排序代码
        System.out.println("排序后:" + Arrays.toString(arr));
    }

    public static void main(String[] args) {
        int[] arr1 = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(arr1);
        System.out.println();
        int[] arr2 = {5, 1, 4, 2, 8};
        bubbleSort(arr2);
    }
}

题目 7:Random + 方法 — 随机密码生成器

难度:⭐⭐⭐
知识点Random 类、第 4 种方法(无参有返回值)、字符串拼接

定义一个方法 generatePassword,生成并返回一个 8 位随机密码,密码由大写字母数字混合组成。

规则

  • 密码长度为 8 位
  • 每一位随机是大写字母(A~Z)或数字(0~9)
  • 使用 Random 类生成随机数

提示

  • 大写字母 A~Z 的 ASCII 码范围是 65~90
  • 数字 0~9 的 ASCII 码范围是 48~57
  • 可以先生成一个随机数决定当前位是字母还是数字,再生成具体字符
  • String 拼接每一位(str += ch

示例(每次运行结果不同):

调用:generatePassword()
返回:"A3K9Q7B2"

调用:generatePassword()
返回:"5X1P8M4J"

示例代码框架

import java.util.Random;

/**
 * @author 你的姓名
 * @title 题目7:随机密码生成器
 * @create 2026/7/17
 */
public class Demo_07_姓名 {
    public static String generatePassword() {
        Random ran = new Random();
        String password = "";
        // 循环8次,每次生成一个字符拼接
        return password;
    }

    public static void main(String[] args) {
        String pwd = generatePassword();
        System.out.println("生成的密码:" + pwd);
        System.out.println("密码长度:" + pwd.length() + " 位");
    }
}

💡 提示ran.nextInt(2) 可以随机生成 0 或 1,用来决定当前位是字母还是数字;使用 (char)(ran.nextInt(26) + 65) 生成随机大写字母。


题目 8:Random + 方法 — 数组随机打乱(Fisher-Yates 洗牌算法)

难度:⭐⭐⭐⭐
知识点:数组作为方法参数、Random 类、数组交换

定义一个方法 shuffleArray,接收一个 int[] 数组,使用 Fisher-Yates 洗牌算法随机打乱数组元素的顺序(在原数组上操作,不创建新数组)。

要求

  • 方法类型:有参数(int[])、无返回值(直接修改原数组)
  • 使用 Random 类生成随机索引
  • main 方法中测试 {1, 2, 3, 4, 5, 6, 7} 数组

算法思路(Fisher-Yates):

从数组最后一个元素开始往前遍历(i 从 length-1 到 1):
    1. 生成一个随机索引 j,范围 [0, i]
    2. 交换 arr[i] 和 arr[j]

示例(每次运行结果不同):

打乱前:[1, 2, 3, 4, 5, 6, 7]
打乱后:[4, 7, 2, 1, 6, 3, 5]

再次运行:
打乱前:[1, 2, 3, 4, 5, 6, 7]
打乱后:[3, 1, 5, 7, 2, 6, 4]

示例代码框架

import java.util.Arrays;
import java.util.Random;

/**
 * @author 你的姓名
 * @title 题目8:数组随机打乱
 * @create 2026/7/17
 */
public class Demo_08_姓名 {
    public static void shuffleArray(int[] arr) {
        Random ran = new Random();
        // 从后往前遍历,实现 Fisher-Yates 洗牌
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        System.out.println("打乱前:" + Arrays.toString(arr));
        shuffleArray(arr);
        System.out.println("打乱后:" + Arrays.toString(arr));
    }
}

💡 提示ran.nextInt(i + 1) 生成 0 ~ i 的随机索引;遍历时 iarr.length - 1 递减到 1


三、挑战题(选做)

题目 9:综合大作业 — 随机抽奖系统

难度:⭐⭐⭐⭐⭐
知识点:方法 4 种声明方式综合、数组作为方法参数、Random 类、方法中调用方法

实现一个随机抽奖系统,将程序拆分为多个方法:

方法 类型 说明
initParticipants() 无参有返回值 创建并返回一个包含 10 个参与者姓名的 String[] 数组(姓名自拟)
printParticipants(String[] names) 有参无返回值 遍历打印所有参与者的编号和姓名
luckyDraw(String[] names) 有参无返回值 从参与者数组中随机抽取一个姓名并输出中奖信息
shuffleArray(String[] arr) 有参无返回值 使用 Fisher-Yates 算法随机打乱数组(参考题目 8)

要求

  • luckyDraw 方法内部调用 shuffleArray 打乱数组,然后取第 1 个元素作为中奖者
  • main 方法中调用以上方法完成完整的抽奖流程

示例输出

======== 随机抽奖系统 ========
参与人员:
1. 张三
2. 李四
3. 王五
4. 赵六
5. 钱七
6. 孙八
7. 周九
8. 吴十
9. 郑十一
10. 陈十二
==============================
🎉 恭喜 王五 中奖!🎉

示例代码框架

import java.util.Arrays;
import java.util.Random;

/**
 * @author 你的姓名
 * @title 题目9:随机抽奖系统
 * @create 2026/7/17
 */
public class Demo_09_姓名 {
    public static String[] initParticipants() {
        // 返回包含10个姓名的数组
    }

    public static void printParticipants(String[] names) {
        // 遍历打印编号+姓名
    }

    public static void shuffleArray(String[] arr) {
        // Fisher-Yates 洗牌算法
    }

    public static void luckyDraw(String[] names) {
        // 1. 调用 shuffleArray 打乱数组
        // 2. 取第1个元素作为中奖者输出
    }

    public static void main(String[] args) {
        System.out.println("======== 随机抽奖系统 ========");
        String[] participants = initParticipants();
        System.out.println("参与人员:");
        printParticipants(participants);
        System.out.println("==============================");
        luckyDraw(participants);
    }
}

💡 提示String[] 数组的洗牌算法和 int[] 完全一样,只是元素类型不同。


四、提交要求

  1. 提交 文件夹下创建【以你名字命名】的文件夹,然后将 Java 源文件复制进去
  2. 每个题目一个文件,命名格式:Demo_题目编号_姓名.java
    • 例如:Demo_01_张三.java
  3. 文件头部使用文档注释,包含:

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

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

  6. 进阶题(6~8)为必做

  7. 挑战题(9)为选做,鼓励学有余力的同学尝试