day05_java笔记(方法)附练习题代码

本文介绍了Java中方法的基本概念,包括方法的定义格式、参数列表和返回值类型。通过多个案例展示了如何定义和调用方法,如求最值、数组元素反转、排序和二分查找等。还探讨了方法的参数传递和方法重载的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 方法概述

1.1. 什么是方法

  • 方法是完成某一个特定功能的代码块

1.2. 方法基本使用

  • 把一些重复代码进行抽取(封闭)思想

  • 调用格式:方法名();

    • 方法必须先创建才可以使用,该过程称为方法定义
    • 方法创建后需手动调用才执行,该过程称为方法调用

1.3. 定义方法格式

修饰符 返回值类型 方法名(参数列表){
    //代码(略)
    return 结果;
}
  • 格式解析:

    • 修饰符:目前为止,固定写public static即可
    • 返回值类型:表示方法运行结果的数据类型
    • 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递
    • return:将方法执行后的结果带给调用者,结束方法

    return结束,这里的结束在开发中,我们正确的叫法称为方法的返回值

2. 方法案例

2.1. 定义方法的两个明确

  • 明确参数列表

    该方法完成一个功能需要的参数个数与参数类型,要明确给出

  • 明确返回值类型

    方法的功能完成后,确定是否有结果返回,如果有,用return将结果返回给调用者;如果没有,返回值类型用void

    :除了返回值类型为void时,其他情况下都要有return

2.2. 案例与练习

2.2.1. 求两个数的最值

package cn.zhuo_02;

import java.util.Scanner;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 10:32
 * @Desc: 需求:求两个数的最值(方法实现)
 */
public class Demo1 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要比较的两个数");

        //输入两个数
        int x = sc.nextInt();
        int y = sc.nextInt();

        //方法的调用
        int max = max(x,y);
        int min = min(x,y);

        //得出结果后输出最值
        System.out.println("最大值为:"+max);
        System.out.println("最小值为:"+min);

    }

    /**
     * 求最大值的方法
     */
    public static int max(int a, int b){

        //比较
        if (a > b){
            return a;
        }
        return b;
    }

    /**
     * 求最小值的方法
     */
    public static int min(int a,int b){
        if (a > b){
            return b;
        }
        return a;
    }

}

2.2.2. 一维数组元素反转

package cn.zhuo_02;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 10:33
 * @Desc: 需求:把一维数组的元素反转(方法实现)
 */
public class Demo2 {
    public static void main(String[] args) {

        //定义一个一维数组
        int[] arr ={11,22,33,44,55};

        //方法的调用
        change(arr);

    }
    /**
     * 反转数组元素的方法
     */
    public static void change(int[] arr){
        //数组中元素的反转代码实现
        for (int i = 0; i < arr.length/2; i++) {
            int temp = arr[i];
            arr[i] =arr[arr.length-1-i];
            arr[arr.length-1-i] = temp;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length-1){
                System.out.print(arr[i]+"]");
            }else{
                System.out.print(arr[i] + ",");
            }
        }
    }
}

2.2.3. 冒泡排序(方法实现)

package cn.zhuo_02;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 10:56
 * @Desc: 需求:冒泡排序(方法实现)
 */
public class Demo3 {

    public static void main(String[] args) {
        //定义一个一维数组
        int[] arr ={15,22,66,10,82,46};

        //方法的调用
        maoPao(arr);
    }

    /**
     * 冒泡排序方法
     */
    public static void maoPao(int[] arr){
        //冒泡排序实现代码
        for (int i = 0; i < arr.length -1; i++) {

            for(int x = 0; x< arr.length -1- i; x++){

                if(arr[x] > arr[x+1]){

                    int temp = arr[x];
                    arr[x]  = arr[x+1];
                    arr[x+1] = temp;
                }
            }
        }

        //遍历经过冒泡排序之后的数组
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length-1){
                System.out.print(arr[i]+"]");
            }else{
                System.out.print(arr[i] + ",");
            }
        }
    }
}

2.2.4. 选择排序(方法实现)

package cn.zhuo_02;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 11:22
 * @Desc: 需求:选择排序(方法实现)
 */
public class Demo4 {
    public static void main(String[] args) {

        //定义一个一维数组
        int[] arr ={15,22,66,10,82,46};

        //方法的调用
        xuanZe(arr);
    }

    /**
     * 选择排序方法实现
     */
    public static void xuanZe(int[] arr){
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if (arr[j]< arr[i]){
                    int temp =arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        //遍历经过选择排序之后的数组
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length-1){
                System.out.print(arr[i]+"]");
            }else{
                System.out.print(arr[i] + ",");
            }
        }

    }
}

2.2.5. 二分查找(方法实现)

package cn.zhuo_02;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 11:28
 * @Desc: 需求:二分查找(方法实现)
 */
public class Demo5 {
    public static void main(String[] args) {

        //定义一个有序的一维数组
        int[] arr = {11,22,33,44,55,66};
        int value = 55;

        //方法的调用
        erFenChaZhao(arr,value);
    }

    /**
     * 二分查找的方法
     */
    public static void erFenChaZhao(int[] arr ,int value){
        //定义最大最小索引
        int max = arr.length-1;
        int min = 0;

        //计算中间索引
        int mid = (max + min )/2;
        while(value != arr[mid]) {
            if (value < arr[mid]) {
                max = mid - 1;
            }else{
                min = mid + 1;
            }
            mid = (max + min)/2;
        }

        System.out.println("查找的值的索引是:"+mid);
    }
}

2.2.6. 比较三个数的大小

package cn.zhuo_02;

import java.util.Scanner;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 11:38
 * @Desc: 需求:比较三个数大小(方法实现)
 */
public class Demo6 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        //提示输入三个数
        System.out.println("请输入三个数:");

        //数据接收
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        //方法的调用
        max(a,b,c);


    }

    /**
     * 比较三个数的大小
     */
    public static void max(int a, int b,int c){
        //比较过程
        int m = a > b ? a : b;
        int n = m > c ? m : c;

        System.out.println("最大值为:"+n);

    }
}

2.2.7. 计算1~100的求和方法

package cn.zhuo_02;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 12:12
 * @Desc: 需求:定义计算1-100的求和方法
 */
public class Demo7 {
    public static void main(String[] args) {
        //方法的调用,和返回值的接收
        int n = getHe();
        System.out.println(n);
    }

    /**
     *计算1~100的求和方法
     */
    public static int getHe(){
        int num = 0;
        for (int i = 1; i <= 100; i++) {
            num += i;
        }
        return num;
    }
}

2.2.8. 求三个数的和

package cn.zhuo_02;

import java.util.Scanner;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 12:13
 * @Desc: 需求:求三个数的和(方法实现)
 */
public class Demo8 {


    public static void main(String[] args) {
        //输入三个数
        System.out.println("请输入三个数:");
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        //方法的调用
        int num = getNum(a, b, c);
        System.out.println(num);

    }
    public static int getNum(int a,int b,int c) {
        //三个数相加实现
        int num = a+b+c;
        return num;

    }

}

2.2.9. 根据要求打印99乘法表

package cn.zhuo_02;

import java.util.Scanner;

/**
 * @Auther: 不学无墅
 * @Date: 2023/7/11 12:14
 * @Desc: 需求:根据用户输入,打印99乘法表(方法实现)
 */
public class Demo9 {
    public static void main(String[] args) {
        //用户输入
        Scanner sc = new Scanner(System.in);
        System.out.println("打印乘法表的前几行?");
        int number = sc.nextInt();
        //调用方法并输出
        Jiu(number);

    }

    /**
     * 打印九九乘法表的方法
     */
    public static void Jiu(int num){
        for (int i = 1; i <= num; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }
}

3. 方法小结

3.1. 定义方法注意事项

  • 定义位置:类中方法外,不能嵌套定义

  • 方法必须先定义,再使用

  • void表示无返回值,不需要书写return

  • 不能在return后面写代码,return意味着方法结束,所有后面的代码记永远都不会执行,属于无效代码

  • 定义方法时()中的参数,我们称之为:形式参数,在调用该方法时传递的参数,我们称之为:实际参数

  • 你可以不接收返回的值,但你必须给出参数

3.2. 调用方法的三种形式

  • 直接调用:直接写方法名进行调用
public static void main(String[] args){
    print();
}
public static void print(){
    System.out.println("方法被调用");
}
  • 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
public static void main(String[] args) {    
    int sum = getSum(5,6);
    System.out.println(sum);
}
public static int getSum(int a,int b) {
    return a + b;
}
  • 输出语句调用:在输出语句中调用方法
public static void main(String[] args) {    
    System.out.println(getSum(5,6));
}
public static int getSum(int a,int b) {
    return a + b;
}

:不能用输出语句调用返回值类型为void类型的方法,因为方法执行后没有返回结果,也就打印不出任何内容

4. 方法重载

4.1. 方法重载概述

  • 同一个类中,具有相同的方法名参数列表不同与返回值无关
    • 注:参数列表不同——个数不同、数据类型不同、顺序不同
  • 重载仅对应方法的定义,与方法的调用无关

5. 方法的参数传递

5.1. 方法参数传递基本类型

  • 基本数据类型的参数形参改变不影响实参
  • 结论依据:每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失

5.2. 方法参数传递引用类型

  • 对于引用类型的参数形参的改变会影响实参的值(如:数组)
  • 引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

找不到工作当个咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值