课程内容:Java 方法 4 种声明方式(无参无返回值 / 有参无返回值 / 有参有返回值 / 无参有返回值)、方法中调用方法、数组作为方法参数、Random 随机数类
提交方式:在提交\姓名\目录下创建对应的 Java 源文件
截止时间:下次上课前
难度:⭐
知识点:第 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 种方法(有参无返回值)、嵌套循环
定义一个方法 printInvertedTriangle,接收一个整数参数 n,打印 n 行的倒直角三角形(由 * 组成)。
示例:
调用:printInvertedTriangle(5)
输出:
*****
****
***
**
*
要求:
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 种方法(有参有返回值)、数组遍历
定义一个方法 average,接收一个 int[] 数组参数,计算并返回数组中所有元素的平均值(double 类型)。
示例:
调用:average({80, 90, 100, 70, 85})
返回:85.0
调用:average({60, 75, 80})
返回:71.66666666666667
要求:
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 种方法(无参有返回值)、条件判断
定义一个方法 getGreeting,根据当前系统时间返回对应的问候语字符串:
"上午好""下午好""晚上好""夜深了,注意休息"示例(假设现在下午 3 点):
调用:getGreeting()
返回:"下午好"
要求:
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 + "!");
}
}
难度:⭐⭐
知识点:方法中调用另一个方法
现实生活中不同国家使用不同的温度单位,我国使用摄氏度(℃),美国等国家使用华氏度(℉)。
要求按如下层次定义方法:
| 方法 | 类型 | 说明 |
|---|---|---|
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", 数值)保留两位小数;摄氏度符号用℃、华氏度用℉。
难度:⭐⭐⭐
知识点:数组作为方法参数、冒泡排序、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);
}
}
难度:⭐⭐⭐
知识点:Random 类、第 4 种方法(无参有返回值)、字符串拼接
定义一个方法 generatePassword,生成并返回一个 8 位随机密码,密码由大写字母和数字混合组成。
规则:
- 密码长度为 8 位
- 每一位随机是大写字母(A~Z)或数字(0~9)
- 使用
Random类生成随机数
提示:
A~Z 的 ASCII 码范围是 65~900~9 的 ASCII 码范围是 48~57String 拼接每一位(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)生成随机大写字母。
难度:⭐⭐⭐⭐
知识点:数组作为方法参数、Random 类、数组交换
定义一个方法 shuffleArray,接收一个 int[] 数组,使用 Fisher-Yates 洗牌算法随机打乱数组元素的顺序(在原数组上操作,不创建新数组)。
要求:
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 的随机索引;遍历时i从arr.length - 1递减到1。
难度:⭐⭐⭐⭐⭐
知识点:方法 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[]完全一样,只是元素类型不同。
提交 文件夹下创建【以你名字命名】的文件夹,然后将 Java 源文件复制进去Demo_题目编号_姓名.java
Demo_01_张三.java文件头部使用文档注释,包含:
/**
* @author 你的姓名
* @title 题目X:题目名称
* @create 2026/7/17
*/
代码整洁,有必要的注释
基础题(1~5)为必做
进阶题(6~8)为必做
挑战题(9)为选做,鼓励学有余力的同学尝试