Parcourir la source

update: Demo01新增第3种方法(有参有返回值)及练习题目(矩形周长/面积、圆形周长/面积、闰年判断),同步更新20260717笔记文档

WanJL il y a 2 jours
Parent
commit
ec9ee4b1d0

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

@@ -102,6 +102,35 @@ public class Demo01 {
         System.out.println(max);
     }
 
+    /*
+        第3种:有参数、有返回值
+        public static 返回值类型 方法名(参数列表){
+            方法体.....
+
+            return 返回值
+        }
+        // 返回值类型可以是任何类型,返回值必须和类型相符
+     */
+    // 定义一个方法,传入int类型数组参数,方法返回数组最大值
+
+    public static int getMaxElement(int[] arr){
+        int max=arr[0];
+        for (int i = 1; i < arr.length; i++) {
+            if (arr[i]>max){
+                max=arr[i];
+            }
+        }
+
+        return max;
+    }
+    /*
+        练习题:
+        定义一个计算矩形周长recPerimeter()的方法,传入参数 长 和 宽, 返回 矩形的周长
+        定义一个计算矩形面积reaArea()的方法,传入参数 长 和 宽, 返回 矩形的面积
+        定义一个计算圆形周长rotundityPerimeter()的方法,传入参数 半径,返回 圆形的周长
+        定义一个计算圆形面积rotundityArea()的方法,传入参数 半径,返回 圆形的面积
+        定义一个计算年份是否是闰年的方法,传入参数年份,返回是否是闰年(true/false)
+     */
 
 
 

+ 118 - 7
课堂笔记/01-JavaSE基础-笔记/20260717-笔记.md

@@ -66,19 +66,52 @@ public static void add(int a, int b) {
 
 调用方式:`add(15, 7);` — 传入实际参数值
 
-#### 第 3 种 & 第 4 种(预告)
+#### 第 3 种:有参数、有返回值
 
-后续课程将补充有返回值的方法声明方式。
+```java
+public static 返回值类型 方法名(参数类型1 参数名1, ..., 参数类型n 参数名n) {
+    // 方法体
+    return 返回值;  // 返回值类型必须与方法声明一致
+}
+```
+
+- 返回值类型可以是 **任何类型**(`int`、`double`、`boolean`、`int[]` 等)
+- 方法体中通过 `return` 语句返回结果
+- 调用方可以**接收返回值**,也可以忽略(但一般都会接收使用)
+
+**示例**:传入 `int[]` 数组参数,返回数组中的最大值
+
+```java
+public static int getMaxElement(int[] arr) {
+    int max = arr[0];
+    for (int i = 1; i < arr.length; i++) {
+        if (arr[i] > max) {
+            max = arr[i];
+        }
+    }
+    return max;
+}
+```
+
+调用方式:
+```java
+int[] scores = {80, 85, 77, 63, 84, 95, 86, 88};
+int maxScore = getMaxElement(scores);   // 接收返回值
+System.out.println("最高分:" + maxScore);  // 输出:最高分:95
+```
 
 ### 3. main 方法调用示例
 
 ```java
 public static void main(String[] args) {
-    // 调用有参数的方法
-    add(15, 7);
-    add(8, 25);
-    add(7, 76);
-    add(9, 23);
+    sub(15, 7);        // 第2种:有参无返回值
+    printFor();        // 第1种:无参无返回值
+    getMax(7, 8, 9);   // 第2种:有参无返回值
+    
+    // 第3种:有参有返回值 — 接收返回值使用
+    int[] scores = {80, 85, 77, 63, 84, 95, 86, 88};
+    int maxScore = getMaxElement(scores);
+    System.out.println("最高分:" + maxScore);
 }
 ```
 
@@ -142,6 +175,81 @@ public static void main(String[] args) {
 }
 ```
 
+### 5. 第 3 种方法练习(有参有返回值)
+
+> 以下练习对应**第 3 种方法声明方式** —— `public static 返回值类型 方法名(参数) { return 值; }`
+
+#### 练习 4:计算矩形周长
+
+```java
+/**
+ * 定义一个计算矩形周长的方法
+ * @param length 长
+ * @param width  宽
+ * @return 矩形的周长
+ */
+public static double recPerimeter(double length, double width) {
+    return 2 * (length + width);
+}
+```
+
+调用方式:`double p = recPerimeter(5.0, 3.0);` // 返回 16.0
+
+#### 练习 5:计算矩形面积
+
+```java
+/**
+ * 定义一个计算矩形面积的方法
+ * @param length 长
+ * @param width  宽
+ * @return 矩形的面积
+ */
+public static double recArea(double length, double width) {
+    return length * width;
+}
+```
+
+#### 练习 6:计算圆形周长
+
+```java
+/**
+ * 定义一个计算圆形周长的方法
+ * @param radius 半径
+ * @return 圆形的周长
+ */
+public static double rotundityPerimeter(double radius) {
+    return 2 * 3.1415926 * radius;
+}
+```
+
+#### 练习 7:计算圆形面积
+
+```java
+/**
+ * 定义一个计算圆形面积的方法
+ * @param radius 半径
+ * @return 圆形的面积
+ */
+public static double rotundityArea(double radius) {
+    return 3.1415926 * radius * radius;
+}
+```
+
+#### 练习 8:判断闰年
+
+```java
+/**
+ * 定义一个判断年份是否是闰年的方法
+ * @param year 年份
+ * @return true 表示闰年,false 表示平年
+ */
+public static boolean isLeapYear(int year) {
+    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
+}
+```
+
+> **闰年规则**:能被 4 整除但不能被 100 整除,或者能被 400 整除。
+
 ---
 
 ## 二、方法进阶 —— 数组作为方法参数(Demo02)
@@ -432,6 +540,9 @@ 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` 三元运算符求最大值 |
 | **数组作为方法参数** | `bubbleSort(int[] arr)` 将数组传入方法、`Arrays.toString()` 打印数组 |
 | **冒泡排序** | 相邻比较、交换、提前结束优化 |

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

@@ -0,0 +1,727 @@
+# 2026-07-17 Java 方法基础练习(课堂练习用)
+
+> **说明**:共 20 道练习题,围绕 Java 方法的 **4 种声明方式** 展开,每种类型 5 道题。
+>
+> **方法 4 种类型**:
+> 1. 无参无返回值(`void` + 无参)
+> 2. 有参无返回值(`void` + 有参)
+> 3. 有参有返回值(有返回值 + 有参)
+> 4. 无参有返回值(有返回值 + 无参)
+
+---
+
+## 第一类:无参无返回值(5 题)
+
+> 方法特点:`public static void 方法名() { ... }` — 不接收参数,也不返回结果,仅执行一段代码。
+
+---
+
+### 练习 1:打印分隔线
+
+**难度**:⭐  
+**知识点**:无参无返回值方法
+
+定义一个方法 `printLine`,调用后打印一条由 `-` 组成的 40 个字符的分隔线。
+
+**示例输出**:
+```
+----------------------------------------
+```
+
+**参考代码**:
+```java
+public class Practice01 {
+    public static void printLine() {
+        for (int i = 0; i < 40; i++) {
+            System.out.print("-");
+        }
+        System.out.println();
+    }
+
+    public static void main(String[] args) {
+        printLine();
+    }
+}
+```
+
+---
+
+### 练习 2:打印九九乘法表
+
+**难度**:⭐⭐  
+**知识点**:无参无返回值方法、嵌套循环
+
+定义一个方法 `multiplicationTable`,调用后输出 9×9 乘法表。
+
+**示例输出**:
+```
+1×1=1	
+1×2=2	2×2=4	
+1×3=3	2×3=6	3×3=9	
+...
+```
+
+**参考代码**:
+```java
+public class Practice02 {
+    public static void multiplicationTable() {
+        for (int i = 1; i <= 9; i++) {
+            for (int j = 1; j <= i; j++) {
+                System.out.print(j + "×" + i + "=" + (i * j) + "\t");
+            }
+            System.out.println();
+        }
+    }
+
+    public static void main(String[] args) {
+        multiplicationTable();
+    }
+}
+```
+
+---
+
+### 练习 3:打印当前时间问候
+
+**难度**:⭐  
+**知识点**:无参无返回值方法
+
+定义一个方法 `greeting`,根据当前系统时间输出问候语(上午输出"早上好",下午输出"下午好",晚上输出"晚上好")。
+
+> **提示**:可以用 `java.time.LocalTime.now()` 获取当前时间。
+
+**参考代码**:
+```java
+import java.time.LocalTime;
+
+public class Practice03 {
+    public static void greeting() {
+        int hour = LocalTime.now().getHour();
+        if (hour >= 6 && hour < 12) {
+            System.out.println("早上好!");
+        } else if (hour >= 12 && hour < 18) {
+            System.out.println("下午好!");
+        } else {
+            System.out.println("晚上好!");
+        }
+    }
+
+    public static void main(String[] args) {
+        greeting();
+    }
+}
+```
+
+---
+
+### 练习 4:打印 1~100 的偶数
+
+**难度**:⭐  
+**知识点**:无参无返回值方法、循环
+
+定义一个方法 `printEven`,调用后输出 1~100 之间的所有偶数,每行输出 10 个数。
+
+**示例输出**:
+```
+ 2  4  6  8 10 12 14 16 18 20
+22 24 26 28 30 32 34 36 38 40
+...
+```
+
+**参考代码**:
+```java
+public class Practice04 {
+    public static void printEven() {
+        int count = 0;
+        for (int i = 2; i <= 100; i += 2) {
+            System.out.printf("%3d", i);
+            count++;
+            if (count % 10 == 0) {
+                System.out.println();
+            }
+        }
+    }
+
+    public static void main(String[] args) {
+        printEven();
+    }
+}
+```
+
+---
+
+### 练习 5:命令行菜单
+
+**难度**:⭐⭐  
+**知识点**:无参无返回值方法
+
+定义一个方法 `showMenu`,调用后在控制台打印一个简易计算器菜单。
+
+**示例输出**:
+```
+========== 简易计算器 ==========
+  1. 加法
+  2. 减法
+  3. 乘法
+  4. 除法
+  0. 退出
+================================
+```
+
+**参考代码**:
+```java
+public class Practice05 {
+    public static void showMenu() {
+        System.out.println("========== 简易计算器 ==========");
+        System.out.println("  1. 加法");
+        System.out.println("  2. 减法");
+        System.out.println("  3. 乘法");
+        System.out.println("  4. 除法");
+        System.out.println("  0. 退出");
+        System.out.println("================================");
+    }
+
+    public static void main(String[] args) {
+        showMenu();
+    }
+}
+```
+
+---
+
+## 第二类:有参无返回值(5 题)
+
+> 方法特点:`public static void 方法名(参数列表) { ... }` — 接收参数处理,但不返回结果。
+
+---
+
+### 练习 6:判断奇偶数
+
+**难度**:⭐  
+**知识点**:有参无返回值方法
+
+定义一个方法 `judgeEven`,接收一个整数参数,判断并输出它是奇数还是偶数。
+
+**示例**:
+```
+调用:judgeEven(7)
+输出:7 是奇数
+
+调用:judgeEven(10)
+输出:10 是偶数
+```
+
+**参考代码**:
+```java
+public class Practice06 {
+    public static void judgeEven(int num) {
+        if (num % 2 == 0) {
+            System.out.println(num + " 是偶数");
+        } else {
+            System.out.println(num + " 是奇数");
+        }
+    }
+
+    public static void main(String[] args) {
+        judgeEven(7);
+        judgeEven(10);
+    }
+}
+```
+
+---
+
+### 练习 7:打印 n 以内的所有质数
+
+**难度**:⭐⭐⭐  
+**知识点**:有参无返回值方法、嵌套循环、质数判断
+
+定义一个方法 `printPrime`,接收一个整数 `n`,输出 2 ~ n 之间的所有质数,每行 5 个。
+
+**示例**:
+```
+调用:printPrime(20)
+输出: 2  3  5  7 11
+     13 17 19
+```
+
+**参考代码**:
+```java
+public class Practice07 {
+    public static void printPrime(int n) {
+        int count = 0;
+        for (int i = 2; i <= n; i++) {
+            boolean isPrime = true;
+            for (int j = 2; j <= Math.sqrt(i); j++) {
+                if (i % j == 0) {
+                    isPrime = false;
+                    break;
+                }
+            }
+            if (isPrime) {
+                System.out.printf("%3d", i);
+                count++;
+                if (count % 5 == 0) {
+                    System.out.println();
+                }
+            }
+        }
+    }
+
+    public static void main(String[] args) {
+        printPrime(20);
+    }
+}
+```
+
+---
+
+### 练习 8:打印 n 层直角三角形
+
+**难度**:⭐⭐  
+**知识点**:有参无返回值方法、嵌套循环
+
+定义一个方法 `printTriangle`,接收一个整数 `n`,打印 n 层的直角三角形(由 `*` 组成)。
+
+**示例**:
+```
+调用:printTriangle(5)
+输出:
+*
+**
+***
+****
+*****
+```
+
+**参考代码**:
+```java
+public class Practice08 {
+    public static void printTriangle(int n) {
+        for (int i = 1; i <= n; i++) {
+            for (int j = 1; j <= i; j++) {
+                System.out.print("*");
+            }
+            System.out.println();
+        }
+    }
+
+    public static void main(String[] args) {
+        printTriangle(5);
+    }
+}
+```
+
+---
+
+### 练习 9:打印 n 层等腰三角形
+
+**难度**:⭐⭐⭐  
+**知识点**:有参无返回值方法、空格和星号的规律
+
+定义一个方法 `printIsosceles`,接收一个整数 `n`,打印 n 层的等腰三角形。
+
+**示例**:
+```
+调用:printIsosceles(5)
+输出:
+    *
+   ***
+  *****
+ *******
+*********
+```
+
+**参考代码**:
+```java
+public class Practice09 {
+    public static void printIsosceles(int n) {
+        for (int i = 1; i <= n; i++) {
+            // 打印空格
+            for (int j = 1; j <= n - i; j++) {
+                System.out.print(" ");
+            }
+            // 打印星号
+            for (int j = 1; j <= 2 * i - 1; j++) {
+                System.out.print("*");
+            }
+            System.out.println();
+        }
+    }
+
+    public static void main(String[] args) {
+        printIsosceles(5);
+    }
+}
+```
+
+---
+
+### 练习 10:打印自定义分隔线
+
+**难度**:⭐  
+**知识点**:有参无返回值方法
+
+定义一个方法 `printLine`,接收两个参数:字符 `ch` 和数量 `count`,打印由 `ch` 组成的 `count` 个字符的分隔线。
+
+**示例**:
+```
+调用:printLine('=', 30)
+输出:==============================
+
+调用:printLine('*', 15)
+输出:***************
+```
+
+**参考代码**:
+```java
+public class Practice10 {
+    public static void printLine(char ch, int count) {
+        for (int i = 0; i < count; i++) {
+            System.out.print(ch);
+        }
+        System.out.println();
+    }
+
+    public static void main(String[] args) {
+        printLine('=', 30);
+        printLine('*', 15);
+    }
+}
+```
+
+---
+
+## 第三类:有参有返回值(5 题)
+
+> 方法特点:`public static 返回值类型 方法名(参数列表) { ... return 值; }` — 接收参数并返回处理结果。
+
+---
+
+### 练习 11:两数求和
+
+**难度**:⭐  
+**知识点**:有参有返回值方法
+
+定义一个方法 `sum`,接收两个整数参数,返回它们的和。
+
+**示例**:
+```
+调用:sum(10, 20)
+返回:30
+```
+
+**参考代码**:
+```java
+public class Practice11 {
+    public static int sum(int a, int b) {
+        return a + b;
+    }
+
+    public static void main(String[] args) {
+        int result = sum(10, 20);
+        System.out.println("10 + 20 = " + result);
+    }
+}
+```
+
+---
+
+### 练习 12:求三个数中的最大值
+
+**难度**:⭐⭐  
+**知识点**:有参有返回值方法、三元运算符
+
+定义一个方法 `maxOfThree`,接收三个整数参数,返回其中的最大值。
+
+**示例**:
+```
+调用:maxOfThree(7, 15, 9)
+返回:15
+```
+
+**参考代码**:
+```java
+public class Practice12 {
+    public static int maxOfThree(int a, int b, int c) {
+        int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
+        return max;
+    }
+
+    public static void main(String[] args) {
+        int max = maxOfThree(7, 15, 9);
+        System.out.println("最大值是:" + max);
+    }
+}
+```
+
+---
+
+### 练习 13:计算圆的面积
+
+**难度**:⭐⭐  
+**知识点**:有参有返回值方法、浮点数运算
+
+定义一个方法 `circleArea`,接收一个 `double` 类型的半径 `r`,返回圆的面积(π 取 3.1415926)。
+
+**示例**:
+```
+调用:circleArea(5.0)
+返回:78.539815
+```
+
+> **公式**:面积 = π × r²
+
+**参考代码**:
+```java
+public class Practice13 {
+    public static double circleArea(double r) {
+        double pi = 3.1415926;
+        return pi * r * r;
+    }
+
+    public static void main(String[] args) {
+        double area = circleArea(5.0);
+        System.out.printf("半径为 5.0 的圆面积:%.2f%n", area);
+    }
+}
+```
+
+---
+
+### 练习 14:判断闰年
+
+**难度**:⭐⭐  
+**知识点**:有参有返回值方法、boolean 返回值
+
+定义一个方法 `isLeapYear`,接收一个整数年份,如果是闰年返回 `true`,否则返回 `false`。
+
+> **闰年规则**:能被 4 整除但不能被 100 整除,或者能被 400 整除。
+
+**示例**:
+```
+调用:isLeapYear(2024)
+返回:true
+
+调用:isLeapYear(2025)
+返回:false
+```
+
+**参考代码**:
+```java
+public class Practice14 {
+    public static boolean isLeapYear(int year) {
+        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
+    }
+
+    public static void main(String[] args) {
+        System.out.println("2024 年是闰年吗?" + isLeapYear(2024));
+        System.out.println("2025 年是闰年吗?" + isLeapYear(2025));
+    }
+}
+```
+
+---
+
+### 练习 15:计算阶乘
+
+**难度**:⭐⭐  
+**知识点**:有参有返回值方法、循环累积
+
+定义一个方法 `factorial`,接收一个整数 `n`,返回 n 的阶乘(n!)。
+
+> **公式**:n! = 1 × 2 × 3 × ... × n,且 0! = 1
+
+**示例**:
+```
+调用:factorial(5)
+返回:120    (1×2×3×4×5=120)
+
+调用:factorial(0)
+返回:1
+```
+
+**参考代码**:
+```java
+public class Practice15 {
+    public static long factorial(int n) {
+        long result = 1;
+        for (int i = 1; i <= n; i++) {
+            result *= i;
+        }
+        return result;
+    }
+
+    public static void main(String[] args) {
+        System.out.println("5! = " + factorial(5));
+        System.out.println("0! = " + factorial(0));
+    }
+}
+```
+
+---
+
+## 第四类:无参有返回值(5 题)
+
+> 方法特点:`public static 返回值类型 方法名() { ... return 值; }` — 不接收参数,但返回一个结果。
+
+---
+
+### 练习 16:获取当前时间的整点小时
+
+**难度**:⭐  
+**知识点**:无参有返回值方法
+
+定义一个方法 `getHour`,返回当前系统时间的整点小时数(0~23)。
+
+**示例**(假设现在是下午 3 点):
+```
+调用:getHour()
+返回:15
+```
+
+**参考代码**:
+```java
+import java.time.LocalTime;
+
+public class Practice16 {
+    public static int getHour() {
+        return LocalTime.now().getHour();
+    }
+
+    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("晚上好!");
+        }
+    }
+}
+```
+
+---
+
+### 练习 17:生成随机幸运数字
+
+**难度**:⭐  
+**知识点**:无参有返回值方法、随机数
+
+定义一个方法 `getLuckyNumber`,生成并返回一个 1~100 之间的随机整数作为幸运数字。
+
+**参考代码**:
+```java
+public class Practice17 {
+    public static int getLuckyNumber() {
+        return (int)(Math.random() * 100) + 1;
+    }
+
+    public static void main(String[] args) {
+        int lucky = getLuckyNumber();
+        System.out.println("今天的幸运数字是:" + lucky);
+    }
+}
+```
+
+---
+
+### 练习 18:返回圆周率值
+
+**难度**:⭐  
+**知识点**:无参有返回值方法、常量返回
+
+定义一个方法 `getPi`,返回圆周率值 3.1415926(`double` 类型)。
+
+**参考代码**:
+```java
+public class Practice18 {
+    public static double getPi() {
+        return 3.1415926;
+    }
+
+    public static void main(String[] args) {
+        double pi = getPi();
+        System.out.println("圆周率 π = " + pi);
+        // 使用返回的 π 值计算半径为 3 的圆面积
+        double area = pi * 3 * 3;
+        System.out.printf("半径为 3 的圆面积 = %.2f%n", area);
+    }
+}
+```
+
+---
+
+### 练习 19:抛骰子
+
+**难度**:⭐⭐  
+**知识点**:无参有返回值方法、随机数
+
+定义一个方法 `rollDice`,模拟抛一颗六面骰子,返回 1~6 之间的随机整数。
+
+**参考代码**:
+```java
+public class Practice19 {
+    public static int rollDice() {
+        return (int)(Math.random() * 6) + 1;
+    }
+
+    public static void main(String[] args) {
+        // 模拟抛两次骰子
+        int first = rollDice();
+        int second = rollDice();
+        System.out.println("第一次抛骰子:" + first);
+        System.out.println("第二次抛骰子:" + second);
+        System.out.println("两次之和:" + (first + second));
+    }
+}
+```
+
+---
+
+### 练习 20:生成随机颜色 RGB
+
+**难度**:⭐⭐  
+**知识点**:无参有返回值方法、返回数组
+
+定义一个方法 `getRandomColor`,生成并返回一个包含 3 个元素的 `int[]` 数组,分别代表 RGB 颜色值(每个分量 0~255)。
+
+**示例**:
+```
+调用:getRandomColor()
+返回:[128, 45, 200]  (每次结果随机)
+```
+
+**参考代码**:
+```java
+import java.util.Arrays;
+
+public class Practice20 {
+    public static int[] getRandomColor() {
+        int[] rgb = new int[3];
+        rgb[0] = (int)(Math.random() * 256);  // R
+        rgb[1] = (int)(Math.random() * 256);  // G
+        rgb[2] = (int)(Math.random() * 256);  // B
+        return rgb;
+    }
+
+    public static void main(String[] args) {
+        int[] color = getRandomColor();
+        System.out.println("随机颜色 RGB = " + Arrays.toString(color));
+    }
+}
+```
+
+---
+
+## 附录:方法 4 种声明方式速查表
+
+| 类型 | 声明格式 | 特点 | 适用场景 |
+|------|---------|------|---------|
+| **无参无返回值** | `public static void 方法名() {}` | 不接收数据,不返回数据 | 打印菜单、输出固定内容 |
+| **有参无返回值** | `public static void 方法名(参数) {}` | 接收数据,不返回数据 | 打印 n 层三角形、判断并输出奇偶 |
+| **有参有返回值** | `public static 类型 方法名(参数) {}` | 接收数据,返回处理结果 | 求和、求最值、计算面积 |
+| **无参有返回值** | `public static 类型 方法名() {}` | 不接收数据,返回结果 | 获取随机数、获取系统时间 |