学会定义Java的方法

2018-08-23  本文已影响0人  王一萍o叩丁狼教育

1. 方法

之前讲解的循环操作,可以解决的是代码重复的问题,但是此时的重复的代码必须是有规律的。那循环操作,能解决所有的代码重复吗?答案肯定是不行的,比如针对于某一种功能的重复操作,循环解决不了,终于方法就该登场了。举个例子。

编写一个飞机大战游戏,程序在运行过程中,需要不断地发射子弹。假设发射子弹功能需要编写200行代码,那么,每次发射子弹都需要重复地编写这200行代码,这样的程序太low了。在开发中我们要遵循DRY原则(Don’t Repeat Youself)——不要重复你自己的代码,因为重复意味着维护成本很大,如果要修改功能代码,则每一个重复的地方都要修改一次,你敢确保每个重复的地方都能改到吗?何况,你不感到厌烦吗?不无聊吗?

为了解决功能代码重复编写的问题,可以把发射子弹的代码提取出来专门放在一个代码块(一对{})中,并为这段代码起个唯一的名字,如此,每次发射子弹的时候直接通过这个名字就可以调用发射子弹的功能代码了。

上述过程中,被提取出来的代码可以就是类中定义的一个方法。


image.png

1.1. 定义和调用(重点)

1.1.1. 方法的定义(重点)

什么是方法,完成特定功能的代码块,代码块会有一个名字。

定义方法,语法格式:

[修饰符] 返回值类型 方法名称(参数类型 参数名1,参数类型 参数名2,…)

{

    方法体;

    [return 返回值;]

}

看看最熟悉的main方法的定义。

image.png

格式分析:

注意事项:

1.1.2. 方法调用(重点)

需求:在MethodDemo类中,定义一个求两个整数之和的方法

方法定义分析:

static int getSum(int a, int b) {

    int c = a + b;

    return c;  //返回 a + b之和

}

注意:

方法调用:

语法格式:返回值类型 变量 = 方法所在类名.方法名(实际参数);

int  result = MethodDemo.getSum(2 , 3);

System.out.println(result);  //输出5

完整代码如下:

public class MethodDemo {

    //定义求两个整数之和的方法

    static int getSum(int a, int b) {

        int c = a + b;

        return c;

    }

    public static void main(String[] args) {

        //调用MethodDemo类中的getSum方法,传入2和3两个参数值,并接受方法返回的结果

        int result = MethodDemo.getSum(2, 3);

        System.out.println(result);

    }

}

画图分析:

image.png

加上现在两个加数变成3和4,上述图该怎么分析?

1.2. 设计练习(掌握)

如何定义一个方法,主要是确定有没有参数,是什么参数,有没有返回,返回什么,这得结合具体需求来确定。

static **?** 方法名(**?**) {

//TODO

}

1.2.1. 方法设计练习(掌握)

//需求1:定义一个方法,打印指定行数的指定字符串

static void print(int line, String output) {

    for (int i = 0; i < line; i++) {

        System.out.println(output);

    }

}

调用方法:

public static void main(String[] args) {

    MethodTest.print(3,"你好师姐");

    MethodTest.print(5,"你好龙哥");

}

需求2:定义一个方法,传入一个int数组,按照格式打印int类型数组

static void printArray(int[] arr) {

    String str = "[";

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

        str = str + arr[i];

        if (i == arr.length - 1) {

            str = str + "]";

        } else {

            str = str + ", ";

        }

    }

    System.out.println(str);

}

调用方法:

public static void main(String[] args) {

    int[] arr = new int[] { 1, 3, 5, 7, 9 };

    MethodTest.printArray(arr);

}

需求3:定义一个方法,传入一个int数组,返回指定元素在数组中第一次出现的索引

static int indexOf(int[] arr, int key) {

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

        if (arr[i] == key) {

            return i;

        }

    }

    return -1;

}

调用方法:

public static void main(String[] args) {

    int[] arr = new int[] { 1, 2, 3, 5, 3, 7, 9 };

    int index = indexOf(arr, 3);

    System.out.println(index);

}

需求4:定义一个方法,传入一个int数组,返回该数组所有元素的平均数

static double getAvg(int[] arr) {

    int total = 0;

    for (int ele : arr) {

        total = total + ele;

    }

    return total / arr.length;

}

调用方法:

public static void main(String[] args) {

    int[] arr = new int[] { 1, 2, 3, 5, 3, 7, 9 };

    double avg = getAvg(arr);

    System.out.println(avg);

}

需求5:定义一个方法,传入两个参数,一个double数组表示多个货品的价格,一个double类型的折扣,返回货品总价格

static double getTotalPrice(double[] arr, double cutOff) {

    double total = 0;

    for (double ele : arr) {

        total = total + ele;

    }

    return total * cutOff;

}

调用方法:

public static void main(String[] args) {

    double[] arr = new double[] { 10.0, 20.0, 30.0, 50.0, 30.0, 70.0, 90.0 };

    double totalPrice = getTotalPrice(arr,0.8);

    System.out.println(totalPrice);

}

1.2.2. 方法可变参数(掌握)

在方法中传递数组有一种更简单的方式——方法的可变参数,其本质是一个语法糖,目的是让开发者写代码更简单。

需求6:定义一个方法,传入两个参数,一个double数组表示多个货品的价格,一个double类型的折扣,返回货品总价格(使用可变参数)

static double getTotalPrice(double cutOff, **double... arr**) {

    double total = 0;

    for (double ele : arr) {

        total = total + ele;

    }

    return total * cutOff;

}

调用方法:

public static void main(String[] args) {

    double[] arr = new double[] { 10.0, 20.0, 30.0, 50.0, 30.0, 70.0, 90.0 };

    double totalPrice = getTotalPrice(0.8, **arr**);

    System.out.println(totalPrice);

}

1.2.3. 方法重载(了解)

方法的重载设计(Overload),表示在同一个类中,允许某方法存在一个以上的同名方法,只要它们的参数列表不同即可。

方法重载判断原则:“两同一不同”

方法重载的作用:屏蔽了同一功能的方法由于参数不同所造成方法名称不同。

注意:方法重载和方法的返回值类型无关,只是一般要求返回值类型相同。

以下的方法都在同一个类中,且方法名都为doWork。

void doWork(int a,char b,boolean c){}

三个参数:分别是int类型、char类型、boolean类型.

下列方法哪些是上述doWork方法的重载方法。

a. void doWork(char b, int a, boolean c){}               //YES

b. int doWork(boolean a,char c ,int b){}  //YES

c. void doWork(int a,char b,double c){}  //YES

d. void doWork(int x,char y,boolean z){}  //编译报错

e. int doWork(int x,double y){}                //YES

f. int doWork(int x, char y,boolean z){}    //编译报错

练习:定义一个重载方法,打印方法print。

若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请参看https://ke.qq.com/course/272077

上一篇下一篇

猜你喜欢

热点阅读