方法

方法

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)形式参数的改变会影响实际参数

image-20250621114209333

作业:

  • 用递归实现不死神兔(斐波那契数列)
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 
 */

image-20250621114836376

image-20250624094743819

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);

    }
}

posted @ 2025-07-04 22:51  小胡coding  阅读(9)  评论(0)    收藏  举报