|
|
@@ -184,28 +184,28 @@ public static void main(String[] args) {
|
|
|
```java
|
|
|
/**
|
|
|
* 定义一个计算矩形周长的方法
|
|
|
- * @param length 长
|
|
|
- * @param width 宽
|
|
|
+ * @param a 长
|
|
|
+ * @param b 宽
|
|
|
* @return 矩形的周长
|
|
|
*/
|
|
|
-public static double recPerimeter(double length, double width) {
|
|
|
- return 2 * (length + width);
|
|
|
+public static int recPerimeter(int a, int b) {
|
|
|
+ return (a + b) * 2;
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-调用方式:`double p = recPerimeter(5.0, 3.0);` // 返回 16.0
|
|
|
+调用方式:`int p = recPerimeter(5, 3);` // 返回 16
|
|
|
|
|
|
#### 练习 5:计算矩形面积
|
|
|
|
|
|
```java
|
|
|
/**
|
|
|
* 定义一个计算矩形面积的方法
|
|
|
- * @param length 长
|
|
|
- * @param width 宽
|
|
|
+ * @param a 长
|
|
|
+ * @param b 宽
|
|
|
* @return 矩形的面积
|
|
|
*/
|
|
|
-public static double recArea(double length, double width) {
|
|
|
- return length * width;
|
|
|
+public static int reaArea(int a, int b) {
|
|
|
+ return a * b;
|
|
|
}
|
|
|
```
|
|
|
|
|
|
@@ -214,27 +214,31 @@ public static double recArea(double length, double width) {
|
|
|
```java
|
|
|
/**
|
|
|
* 定义一个计算圆形周长的方法
|
|
|
- * @param radius 半径
|
|
|
+ * @param r 半径
|
|
|
* @return 圆形的周长
|
|
|
*/
|
|
|
-public static double rotundityPerimeter(double radius) {
|
|
|
- return 2 * 3.1415926 * radius;
|
|
|
+public static double rotundityPerimeter(int r) {
|
|
|
+ return 3.14 * r * 2;
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-#### 练习 7:计算圆形面积
|
|
|
+#### 练习 7:计算圆形面积(方法调用方法)
|
|
|
|
|
|
```java
|
|
|
/**
|
|
|
* 定义一个计算圆形面积的方法
|
|
|
- * @param radius 半径
|
|
|
+ * @param r 半径
|
|
|
* @return 圆形的面积
|
|
|
*/
|
|
|
-public static double rotundityArea(double radius) {
|
|
|
- return 3.1415926 * radius * radius;
|
|
|
+public static double rotundityArea(int r) {
|
|
|
+ // return 3.14 * r * r;
|
|
|
+ return getPI() * r * r; // 调用了另一个方法 getPI()
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+> **✨ 知识点:方法中调用另一个方法**
|
|
|
+> `rotundityArea` 内部调用了 `getPI()` 方法获取 π 值,体现了**方法的复用** —— 将获取 π 的逻辑抽取到独立方法中,多处调用。
|
|
|
+
|
|
|
#### 练习 8:判断闰年
|
|
|
|
|
|
```java
|
|
|
@@ -244,7 +248,11 @@ public static double rotundityArea(double radius) {
|
|
|
* @return true 表示闰年,false 表示平年
|
|
|
*/
|
|
|
public static boolean isLeapYear(int year) {
|
|
|
- return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
|
|
+ if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
```
|
|
|
|
|
|
@@ -252,6 +260,48 @@ public static boolean isLeapYear(int year) {
|
|
|
|
|
|
---
|
|
|
|
|
|
+### 6. 第 4 种方法:无参数、有返回值
|
|
|
+
|
|
|
+```java
|
|
|
+public static 返回值类型 方法名() {
|
|
|
+ // 方法体
|
|
|
+ return 返回值;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**示例**:定义一个返回 π 值的方法
|
|
|
+
|
|
|
+```java
|
|
|
+/**
|
|
|
+ * 定义一个返回 PI 的方法,没有参数,但是有返回值
|
|
|
+ * @return 圆周率 3.1415926
|
|
|
+ */
|
|
|
+public static double getPI() {
|
|
|
+ return 3.1415926;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+调用方式:
|
|
|
+```java
|
|
|
+double pi = getPI(); // 接收返回值
|
|
|
+double area = getPI() * 5 * 5; // 直接在表达式中使用
|
|
|
+```
|
|
|
+
|
|
|
+> **第 4 种方法特点**:不接收任何参数,但返回一个值。适合获取**固定常量**、**随机数**、**系统状态**等场景。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 7. 4 种方法声明方式速查
|
|
|
+
|
|
|
+| 类型 | 声明格式 | 示例方法 | 适用场景 |
|
|
|
+|------|---------|---------|---------|
|
|
|
+| **无参无返回值** | `void 方法名()` | `add()`, `printFor()` | 打印菜单、输出固定内容 |
|
|
|
+| **有参无返回值** | `void 方法名(参数)` | `sub()`, `getMax()` | 根据传入数据执行操作并输出 |
|
|
|
+| **有参有返回值** | `类型 方法名(参数)` | `getMaxElement()`, `recPerimeter()`, `isLeapYear()` | 根据传入数据计算并返回结果 |
|
|
|
+| **无参有返回值** | `类型 方法名()` | `getPI()` | 获取固定常量或随机数 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
## 二、方法进阶 —— 数组作为方法参数(Demo02)
|
|
|
|
|
|
### 1. 概念
|
|
|
@@ -312,9 +362,112 @@ System.out.println(Arrays.toString(arr));
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 四、课后作业 —— 三种排序算法复习
|
|
|
+## 三、Random 随机数类(Demo03)
|
|
|
+
|
|
|
+### 1. 概述
|
|
|
+
|
|
|
+`java.util.Random` 是 Java 提供的**随机数生成器**类,功能比 `Math.random()` 更强大,可以生成各种类型的随机数。
|
|
|
+
|
|
|
+### 2. 创建 Random 对象
|
|
|
+
|
|
|
+```java
|
|
|
+// 方式一:无随机种子构造,每次运行生成的随机数都不同
|
|
|
+Random ran = new Random();
|
|
|
+
|
|
|
+// 方式二:有随机种子构造,相同种子会生成相同的随机数序列(一般用于测试)
|
|
|
+Random ran1 = new Random(42);
|
|
|
+```
|
|
|
+
|
|
|
+### 3. 常用方法
|
|
|
+
|
|
|
+```java
|
|
|
+// 生成 int 类型的随机数(不指定范围)
|
|
|
+int n1 = ran.nextInt();
|
|
|
+System.out.println(n1); // 可能是任何 int 值
|
|
|
+
|
|
|
+// 生成指定范围的随机数(0 ~ 参数之间,包含 0,不包含参数)
|
|
|
+int n2 = ran.nextInt(100);
|
|
|
+System.out.println(n2); // 0 ~ 99 之间的随机数
|
|
|
+```
|
|
|
+
|
|
|
+### 4. 与 Math.random() 对比
|
|
|
+
|
|
|
+| 对比项 | `Math.random()` | `Random` 类 |
|
|
|
+|--------|----------------|-------------|
|
|
|
+| 类型 | 静态方法 | 需要创建对象 |
|
|
|
+| 返回值 | `double` (0.0 ~ 1.0) | 多种类型 (`int`, `double`, `boolean` 等) |
|
|
|
+| 范围控制 | 需手动运算 `(int)(Math.random() * 范围)` | 直接 `nextInt(范围)` |
|
|
|
+| 适用场景 | 简单随机需求 | 复杂随机需求,或需要种子控制 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、Random + 方法综合练习(Demo04)
|
|
|
+
|
|
|
+> 结合 Random 类和方法的第 3、4 种声明方式,完成以下练习。
|
|
|
+
|
|
|
+### 课堂练习题
|
|
|
+
|
|
|
+Demo04 中列出了 4 道练习,目前实现了 `getRandomColor()`:
|
|
|
+
|
|
|
+```java
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Random;
|
|
|
+
|
|
|
+public class Demo04 {
|
|
|
+
|
|
|
+ // 生成随机颜色 RGB — 返回 int[] 数组
|
|
|
+ public static int[] getRandomColor() {
|
|
|
+ int[] color = new int[3];
|
|
|
+ Random ran = new Random();
|
|
|
+ color[0] = ran.nextInt(256); // R: 0~255
|
|
|
+ color[1] = ran.nextInt(256); // G: 0~255
|
|
|
+ color[2] = ran.nextInt(256); // B: 0~255
|
|
|
+ return color;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ int[] color = getRandomColor();
|
|
|
+ System.out.println(Arrays.toString(color));
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 练习列表
|
|
|
+
|
|
|
+| 练习 | 方法名 | 类型 | 说明 |
|
|
|
+|------|--------|------|------|
|
|
|
+| 1 | `getVerificationCode()` | 无参有返回值 | 生成 100000~999999 的 6 位验证码 |
|
|
|
+| 2 | `getLuckyNumber()` | 无参有返回值 | 生成 1~100 的幸运数字 |
|
|
|
+| 3 | `diceRoll()` | 无参有返回值 | 模拟抛骰子,返回 1~6 |
|
|
|
+| 4 | `getRandomColor()` | 无参有返回值(返回数组) | 返回 3 个 RGB 分量的 int[] 数组(已实现) |
|
|
|
+
|
|
|
+> **提示**:`ran.nextInt(范围)` 生成的是 0 ~ (范围-1) 的随机数,如需从其他值开始,可以加上偏移量。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、在线 OJ 编码模板(Main.java)
|
|
|
+
|
|
|
+> 这是一个解决在线 OJ 平台提交代码时中文乱码问题的模板。
|
|
|
+
|
|
|
+```java
|
|
|
+import java.io.PrintStream;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+
|
|
|
+public class Main {
|
|
|
+ public static void main(String[] args) throws UnsupportedEncodingException {
|
|
|
+ // 设置系统输出的字符编码为 UTF-8,解决中文乱码
|
|
|
+ System.setOut(new PrintStream(System.out, true, "UTF-8"));
|
|
|
+
|
|
|
+ // 后面写代码...
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+> **原因**:本地 IDEA 使用 UTF-8 编码,但部分在线 OJ 平台使用 GBK 解码,导致中文乱码。
|
|
|
+
|
|
|
+---
|
|
|
|
|
|
-## 二、课后作业 —— 三种排序算法复习
|
|
|
+## 六、课后作业 —— 三种排序算法复习
|
|
|
|
|
|
> 本日作业巩固了 7 月 16 日学习的三种排序算法。
|
|
|
|
|
|
@@ -430,7 +583,7 @@ for (int i = 1; i < studentScores.length; i++) {
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 五、课后作业 —— Scanner 学生信息采集系统(HomeWork04)
|
|
|
+## 七、课后作业 —— Scanner 学生信息采集系统(HomeWork04)
|
|
|
|
|
|
> 使用 `Scanner` 键盘输入,采集学生信息并计算 BMI 指数。
|
|
|
|
|
|
@@ -535,16 +688,20 @@ public static void main(String[] args) {
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 六、本日总结
|
|
|
+## 八、本日总结
|
|
|
|
|
|
| 知识点 | 主要内容 |
|
|
|
|--------|----------|
|
|
|
-| **Java 方法** | 方法的定义、4 种声明方式、参数传递、方法调用 |
|
|
|
-| **第 1 种:无参无返回值** | `void 方法名()` — 打印菜单、输出固定内容 |
|
|
|
-| **第 2 种:有参无返回值** | `void 方法名(参数)` — sub、printFor、getMax、打印三角形 |
|
|
|
-| **第 3 种:有参有返回值** | `返回值类型 方法名(参数)` — getMaxElement、recPerimeter、recArea、rotundityPerimeter、rotundityArea、isLeapYear |
|
|
|
-| **方法练习实现** | `sub` 两数相减、`printFor` 输出1~100、`getMax` 三元运算符求最大值 |
|
|
|
+| **Java 方法 4 种声明方式** | 无参无返回值、有参无返回值、有参有返回值、无参有返回值 |
|
|
|
+| **第 1 种:无参无返回值** | `void 方法名()` — `add()`, `printFor()` |
|
|
|
+| **第 2 种:有参无返回值** | `void 方法名(参数)` — `sub()`, `getMax()` |
|
|
|
+| **第 3 种:有参有返回值** | `类型 方法名(参数)` — `getMaxElement()`, `recPerimeter()`, `reaArea()`, `rotundityPerimeter()`, `rotundityArea()`, `isLeapYear()` |
|
|
|
+| **第 4 种:无参有返回值** | `类型 方法名()` — `getPI()` |
|
|
|
+| **方法中调用方法** | `rotundityArea()` 内部调用 `getPI()` — 体现代码复用 |
|
|
|
| **数组作为方法参数** | `bubbleSort(int[] arr)` 将数组传入方法、`Arrays.toString()` 打印数组 |
|
|
|
+| **Random 随机数类** | `Random` 对象创建、`nextInt()` 无范围 / `nextInt(范围)` 有范围随机数 |
|
|
|
+| **Random + 方法综合** | `getRandomColor()` 返回 `int[]` 数组、4 道课堂练习题 |
|
|
|
+| **在线 OJ 编码模板** | `System.setOut()` 解决 UTF-8/GBK 中文乱码问题 |
|
|
|
| **冒泡排序** | 相邻比较、交换、提前结束优化 |
|
|
|
| **选择排序** | 每轮选最大值、降序排列 |
|
|
|
| **插入排序** | 已排序/未排序分区、从后往前插入 |
|