方法
方法
1 方法概述
方法就是一个有名字的代码块,进去方法的是参数,返回出来的数据是返回值
格式
修饰符 返回值类型 方法名(参数列表){
方法体;
return 返回值;
}
- 修饰符:目前先记住是public static
- 返回值类型: 经过方法的代码,最终返回的结果值的数据类型
- 方法名:和变量名规则一样
- 参数列表:参数的数据类型和参数名,多个参数用,隔开
- 方法体:方法中的具体代码
- return: 1.立即结束方法的执行 2.将最终结果交给方法的调用处
- 返回值:方法最终的结果
注意:方法不能嵌套,方法要定义在类中,方法外
方法的定义和方法的执行顺序无关
要使用方法,需要在main方法中调用方法
格式:
方法名(参数);
2 void
// 定义方法,打印所有的水仙花数
// void:代表这个方法不需要返回值
public static void printFlower(){
for (int i = 100;i < 1000;i++){
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
System.out.println(i);
}
}
}
课堂练习:
- 定义方法,比较两个整数是否相等
- 传入一个数字,打印1到这个数字的所有整数
// 定义方法,比较两个整数是否相等
public static boolean isEqual(int a,int b){
// if (a == b){
// return true;
// }else {
// return false;
// }
return a == b;
}
// 传入一个数字,打印1到这个数字的所有整数
public static void print(int n){
for (int i = 1; i <= n; i++) {
System.out.println(i);
}
}
3 方法的重载
方法重载概述:
- 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
- 方法的重载和参数名和返回值类型都无关
- 只要调用的时候能够区分开方法,就允许重载
public static void main(String[] args) {
sum(10,20,30);
}
// sum(int,int)
public static int sum(int a,int b){
return a + b;
}
public static int sum(){
return 10;
}
// sum(int,int,int)
public static int sum(int a,int b,int c){
return b + a + c;
}
public static void sum(int a,double b,int c){
}
4 方法的递归
在方法中调用自身的方法。可以将复杂的业务逻辑看作一个个小的业务逻辑。递归一定要给一个出口,保证递归一定次数后可以结束。否则会出现栈溢出错误(StackOverflowError)
// 求1-n的和
// sum(10) = 10 + sum(9)
// sum(10) = 10 + 9 + sum(8)
// sum(10) = 10 + 9 + 8 + ...3 + sum(2)
// sum(10) = 10 + 9 + 8 + ...3 + 2 + sum(1)
// sum(10) = 10 + 9 + 8 + ...3 + 2 + 1
public static int sum(int n){
if (n == 1) return 1;
return n + sum(n - 1);
}
5 方法参数传递问题
形式参数:定义方法时,参数列表中的变量
实际参数:调用方法时,传入给方法的数值。
-
基本数据类型(包含String)形式参数的改变不会影响实际参数
![image-20250621113313324]()
-
引用数据类型(不包含String)形式参数的改变会影响实际参数

作业:
- 用递归实现不死神兔(斐波那契数列)
public static int rabbit(int n){
if (n == 1 || n == 2) return 1;
return rabbit(n - 1) + rabbit(n -2);
}
- 汉诺塔问题:
- 传说有三个金刚石塔,第一个塔上面从小到大摆着64片黄金圆盘。现在要把圆盘按照大小顺序重新摆放在另一个塔上。并且规定在小圆盘上不能放大圆盘。在三个塔之间一次只能移动一个圆盘。
- 要求把圆盘移动的最理想的轨迹打印在控制台上。
// 汉诺塔问题
// n: 代表圆盘的数量
// A:代表需要移动圆盘的柱子
// B:代表的是辅助的柱子
// C:代表的是要移动到的柱子
public static void hanio(int n,char A,char B,char C){
if (n == 1){
System.out.println(A + "->" + C);
}else {
hanio(n - 1, A,C,B);
System.out.println(A + "->" + C);
hanio(n - 1, B,A,C);
}
}
6 文档注释
/**注释的内容*/
/**
* 汉诺塔问题
* @param n 代表圆盘的数量
* @param A 代表需要移动圆盘的柱子
* @param B 代表的是辅助的柱子
* @param C 代表的是要移动到的柱子
*/
public static void hanio(int n,char A,char B,char C){
if (n == 1){
System.out.println(A + "->" + C);
}else {
hanio(n - 1, A,C,B);
System.out.println(A + "->" + C);
hanio(n - 1, B,A,C);
}
}
/**
* @className: ${NAME}
* @description:
* @author:hlx
* @date: ${DATE} ${TIME}
* @version: 0.1
* @since: jdk17
*/


7 全局变量
定义在类中方法外,使用public static修饰的变量
// 全局变量
public static int a;
// 全局变量
public static Scanner scanner = new Scanner(System.in);
补充:二维数组
声明格式:
数据类型[][] 数组名称; 推荐
数据类型 数组名称[][]; 了解
数据类型[] 数组名称[];
二维数组的初始化:
-
动态初始化(指定长度):
-
格式:
-
数据类型[][] 数组名称 = new 数据类型[m][n]; -
m: 二维数组的长度(一维数组的个数)
-
n:一维数组的长度 可以省略
-
-
静态初始化:
-
格式:
-
数据类型[][] 数组名称 = new 数据类型[][]{{元素值1,元素值2...元素值n},{元素值1,元素值2...元素值n},{元素值1,元素值2...元素值n}}; -
数据类型[][] 数组名称 = {{元素值1,元素值2...元素值n},{元素值1,元素值2...元素值n},{元素值1,元素值2...元素值n}}; -
注意:简化格式不能分开定义!
-
public static void main(String[] args) {
// {null,null,null}
int[][] arr = new int[3][];
// [[I@4eec7777
// [[:二维数组
System.out.println(arr);
// [I@3b07d329
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
arr[0] = new int[3];
arr[1] = new int[4];
System.out.println(arr[0][1]);
int[][] arr1;
arr1 = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
// System.out.println(arr1[1][2]);
System.out.println(arr1[2][3]);
// 遍历二维数组
for (int i = 0;i < arr1.length;i++){
for (int j = 0; j < arr1[i].length; j++) {
System.out.println(arr1[i][j]);
}
}
}
幸运抽奖基础版
package cn.javasm.demo;
import java.util.Arrays;
import java.util.Scanner;
/**
* @className: Lucky
* @description:
* @author: gfs
* @date: 2025/6/24 17:03
* @version: 0.1
* @since: jdk17
*/
public class Lucky {
public static String regName;
public static String regPwd;
public static int randomNum;
public static int[] luckyNumArray = new int[5];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < luckyNumArray.length; i++) {
luckyNumArray[i] = (int)(Math.random() * 9000 + 1000);
}
String str;
// 登录成功就是true,登录失败就是false
boolean loginFlag = false;
// ctrl + alt + t
do {
System.out.println("******************欢迎进入幸运抽奖系统******************\n" +
" 1.注册\n" +
" 2.登录\n" +
" 3.抽奖");
System.out.println("请选择要操作的功能:");
int choice = scanner.nextInt();
switch (choice){
case 1:
userRegister(scanner);
break;
case 2:
// alt + 回车
loginFlag = userLogin(scanner,loginFlag);
break;
case 3:
lucky(loginFlag);
break;
}
System.out.println("是否要继续?y/n");
str = scanner.next();
} while ("y".equals(str));
System.out.println("程序退出,bye~");
}
/**
* 抽奖
*/
private static void lucky(boolean loginFlag) {
// 判断是否登录
if (!loginFlag){
System.out.println("请先登录");
return;
}
// 生成5个4位随机数
System.out.println("今日的幸运卡号是" + Arrays.toString(luckyNumArray));
for (int num : luckyNumArray) {
if (num == randomNum){
System.out.println(randomNum + "是今日幸运会员");
return;
}
}
System.out.println(randomNum + "不是今日幸运会员");
}
/**
* 登录
* @param scanner
* return 登录是否成功
*/
private static boolean userLogin(Scanner scanner,boolean loginFlag) {
// 无需重复登录,切换账号
if (loginFlag){
System.out.println("已经登录成功了,是否要切换账号登录?y/n");
String str = scanner.next();
if ("n".equals(str)){
return true;
}
}
// 登录之前先注册
if (regName == null){
System.out.println("请先注册");
return false;
}
int count = 3;
do {
count--;
System.out.println("请输入登录的name:");
String loginName = scanner.next();
System.out.println("请输入登录的password:");
String loginPwd = scanner.next();
if (loginName.equals(regName) && loginPwd.equals(regPwd)){
System.out.println("登录成功,欢迎你:" + loginName);
return true;
}
if (count == 0){
System.out.println("3次机会已经使用完毕,返回主页面");
return false;
}
System.out.println("登录失败,还剩下" + count + "次机会,请重新登录");
} while (true);
}
/**
* 注册
* @param scanner
*/
public static void userRegister(Scanner scanner){
System.out.println("请输入个人注册信息:");
System.out.println("请输入注册的name:");
regName = scanner.next();
System.out.println("请输入注册的password:");
regPwd = scanner.next();
// 生成4位的随机数作为卡号 [1000,10000)
randomNum = (int)(Math.random() * 9000 + 1000);
System.out.println("注册成功,信息如下:");
System.out.println(regName + "\t" + regPwd + "\t" + randomNum);
}
}


浙公网安备 33010602011771号