Просмотр исходного кода

feat: Demo01新增第4种方法无参有返回值(getPI)及方法调用方法,新增Demo03 Random随机数类、Demo04 Random+方法综合练习、Main OJ编码模板,全面更新20260717笔记

WanJL 1 день назад
Родитель
Сommit
ec223171c6

+ 60 - 0
授课代码/c260717/src/Demo01.java

@@ -132,9 +132,69 @@ public class Demo01 {
         定义一个计算年份是否是闰年的方法,传入参数年份,返回是否是闰年(true/false)
      */
 
+    /**
+     * 定义一个计算矩形周长recPerimeter()的方法,传入参数 长 和 宽, 返回 矩形的周长
+     * @param a 长
+     * @param b 宽
+     * @return 周长
+     */
+    public static int recPerimeter(int a,int b){
+        return (a+b)*2;
+    }
 
+    /**
+     * 定义一个计算矩形面积reaArea()的方法,传入参数 长 和 宽, 返回 矩形的面积
+     * @param a 长
+     * @param b 宽
+     * @return 面积
+     */
+    public static int reaArea(int a,int b){
+        return a*b;
+    }
 
+    /**
+     * 定义一个计算圆形周长rotundityPerimeter()的方法,传入参数 半径,返回 圆形的周长
+     * @param r 半径
+     * @return 周长
+     */
+    public static double rotundityPerimeter(int r){
+        return 3.14*r*2;
+    }
 
+    /**
+     * 定义一个计算圆形面积rotundityArea()的方法,传入参数 半径,返回 圆形的面积
+     * @param r 半径
+     * @return 面积
+     */
+    public static double rotundityArea(int r){
+        //return 3.14*r*r;
+        return getPI()*r*r;
+    }
+
+    /**
+     * 定义一个计算年份是否是闰年的方法,传入参数年份,返回是否是闰年(true/false)
+     * @param year 年份
+     * @return 是否为闰年 是 返回 true,否 返回false
+     */
+    public static boolean isLeapYear(int year){
+        if (year%4==0&&year%100!=0||year%400==0){
+            return true;
+        }else {
+            return false;
+        }
+    }
 
+    /*
+        第4种:没有参数,有返回值 的方法
+        格式:
+            public static 返回值类型 方法名(){
+                方法内容....
+                return 返回值;
+            }
+     */
+    //定义一个返回PI 的方法,没有参数,但是有返回值
+    public static double getPI(){
+        return 3.1415926;
+    }
 
 }

+ 27 - 0
授课代码/c260717/src/Demo03.java

@@ -0,0 +1,27 @@
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Random;
+import java.util.Scanner;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo03
+ * @description 随机数类 Random
+ * @create 2026/7/17
+ */
+public class Demo03 {
+    public static void main(String[] args) {
+        //1、创建随机数对象
+        Random ran=new Random();    //没有传入参数的,属于无随机种子构造,每次运行生成的随机数都不同
+        //Random ran1=new Random(42); //传入参数的,属于有随机种子钩子,相同种子会生成相同的随机数序列,一般用来进行测试
+        //生成int类型的随机数,但是不指定范围
+        int n1=ran.nextInt();
+        System.out.println(n1);
+        //指定了随机数的生成范围后,随机数会在 0~ 参数之间 生成随机数,包含0,但是不包含参数
+        int n2=ran.nextInt(100);
+        System.out.println(n2);
+    }
+
+}
+

+ 47 - 0
授课代码/c260717/src/Demo04.java

@@ -0,0 +1,47 @@
+import java.util.Arrays;
+import java.util.Random;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo04
+ * @description
+ * @create 2026/7/17
+ */
+public class Demo04 {
+    /*
+        课堂练习题:
+        1、生成6位随机验证码
+            定义一个方法 getVerificationCode(),生成并返回 100000~999999 之间 的随机数,作为6位数字验证码
+            每次运行结果都要不同。
+          效果:
+            调用getVerificationCode()方法
+            返回:8795326
+        2、生成随机幸运数字
+            定义一个方法getLuckyNumber(),生成并返回一个1~100之间的随机整数作为幸运数字
+        3、抛骰子
+            定义一个方法diceRoll(),模拟抛一颗六面骰子,返回1~6之间的随机数。
+        4、生成随机颜色 RGB
+            定义一个方法getRandomColor()  ,生成并返回一个包含3个元素的int类型数组,分别表达RGB的三个颜色色值。
+            每个色值范围 0~255
+          效果:
+            调用getRandomColor()方法
+            返回:[128,4,6]
+     */
+    public static int[] getRandomColor(){
+        //1、创建存储颜色值的数组,长度为3
+        int[] color=new int[3];
+        //2、创建Random 对象
+        Random ran=new Random();
+        color[0]=ran.nextInt(256);
+        color[1]=ran.nextInt(256);
+        color[2]=ran.nextInt(256);
+        return color;
+    }
+
+    public static void main(String[] args) {
+        int[] color=getRandomColor();
+        System.out.println(Arrays.toString(color));
+    }
+
+}

+ 21 - 0
授课代码/c260717/src/Main.java

@@ -0,0 +1,21 @@
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+
+/**
+ *  这是一套专门解决在线OJ平台提交代码有中文时UTF-8和GBK字符集的问题的模版
+ */
+public class Main {
+
+    public static void main(String[] args) throws UnsupportedEncodingException {
+        //后续在OJ平台中,如果有中文的输入和输出,记得在main方法中加:
+
+        //为什么会报错,测试用例不通过,原因是 我们写的代码是UTF-8字符集,但是在线OJ平台使用的是GBK字符集。
+        // 使用的是UTF-8 编码,使用GBK解码
+        // 我增加了额外的一个代码设置,设置所有的系统输出语句都要遵循UTF-8字符集编码和解码
+        System.setOut(new PrintStream(System.out,true,"UTF-8"));
+
+
+        //后面写代码
+    }
+    //后面写代码....
+}

+ 183 - 26
课堂笔记/01-JavaSE基础-笔记/20260717-笔记.md

@@ -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 中文乱码问题 |
 | **冒泡排序** | 相邻比较、交换、提前结束优化 |
 | **选择排序** | 每轮选最大值、降序排列 |
 | **插入排序** | 已排序/未排序分区、从后往前插入 |

+ 13 - 21
课堂练习题/20260717-Java方法基础练习.md

@@ -567,39 +567,31 @@ public class Practice15 {
 
 ---
 
-### 练习 16:获取当前时间的整点小时
+### 练习 16:生成 6 位随机验证码
 
-**难度**:⭐  
-**知识点**:无参有返回值方法
+**难度**:⭐  
+**知识点**:无参有返回值方法、随机数
 
-定义一个方法 `getHour`,返回当前系统时间的整点小时数(0~23)
+定义一个方法 `getVerificationCode`,生成并返回一个 100000~999999 之间的随机整数,作为 6 位数字验证码
 
-**示例**(假设现在是下午 3 点):
+**示例**(每次运行结果不同):
 ```
-调用:getHour()
-返回:15
+调用:getVerificationCode()
+返回:837291
 ```
 
 **参考代码**:
 ```java
-import java.time.LocalTime;
-
 public class Practice16 {
-    public static int getHour() {
-        return LocalTime.now().getHour();
+    public static int getVerificationCode() {
+        // 100000 ~ 999999 之间的随机整数
+        return (int)(Math.random() * 900000) + 100000;
     }
 
     public static void main(String[] args) {
-        int hour = getHour();
-        System.out.println("现在时间是:" + hour + "点");
-
-        if (hour >= 6 && hour < 12) {
-            System.out.println("上午好!");
-        } else if (hour >= 12 && hour < 18) {
-            System.out.println("下午好!");
-        } else {
-            System.out.println("晚上好!");
-        }
+        int code = getVerificationCode();
+        System.out.println("您的验证码是:" + code);
+        System.out.println("验证码长度为:" + String.valueOf(code).length() + " 位");
     }
 }
 ```