05 方法

一、方法入门

1.1 定义方法求两个int数据之和

public class Demo02 {
    public static void main(String[] args) {
        //定义2个int变量a和b,并初始化
        int a = 10, b = 20;
        //调用方法完成求和
        int sum = getSum(a, b);
        
        //打印结果
        System.out.println(sum);

        int c = 100, d = 200;
        int sum2 = getSum(c, d);
        System.out.println(sum2);        
    }
	//定义方法完成计算两个int数据之和
    public static int getSum(int a, int b) {
        int result = a + b;
        return result;
    }
} 

1.2 方法说明

/*
	定义方法需要考虑哪些问题?
		1.方法名称: 就是给方法起个名字,使用名字调用方法
		2.是否有未知数据参加运算: 
			并不清楚具体的对那两个数求和,但是调用方法时肯定会给两个int数据,
			所以定义两个int变量接收需要求和的数据
		3.是否产生结果: 两个int数据的和一定是有结果的,而且结果也必然是int类型
	
	需要注意的地方:
		1.public static: 目前固定写法
		2.int: 方法内部产生的结果的类型
		3.return result: 把结果result返回给调用的地方
	
*/
//定义方法完成计算两个int数据之和
public static int getSum(int a, int b) {
	int result = a + b;
	return result;
}

二、方法详解

2.1 定义方法的格式详解

修饰符 返回值类型 方法名(参数列表){
        //代码省略...
        return 结果;
}
  • 修饰符: public static 固定写法
  • 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
  • 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递
  • return:将方法执行后的结果带给调用者,方法执行到return ,整体方法运行结束

小贴士:return 结果; 这里的"结果"在开发中,我们正确的叫法成为方法的返回值

2.2 定义方法的三个明确

  • 明确方法名称:给方法起个名字,方便调用,只要符合标识符规则就可以,尽量做到见名知意
  • 明确返回值类型:方法计算的是整数的求和,结果也必然是个整数,返回值类型定义为int类型。
  • 明确参数列表:计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义两个int类型的变量,由调用者调用方法时传递

2.3 方法的调用方式

2.3.1 有返回值的方法调用

有返回值的方法的调用
	1.赋值调用: 把调用有返回值方法的返回的结果赋值给左侧的变量         ---推荐使用---
		数据类型 变量名称 = 方法名称(参数列表....)

	2.打印/输出调用: 把调用有返回值方法的返回的结果直接交给输出语句
		System.out.println(方法名称(参数列表....));

	3.单独/独立/直接调用: 直接调用有返回值方法,对结果数据没有任何处理(丢失了结果)       ---不推荐使用---
		方法名称(参数列表....);

2.3.2 无返回值的方法调用

无返回值的方法调用方式
       1.单独/独立/直接调用: 直接调用有返回值方法,对结果数据没有任何处理   ---只能使用这种方式---
           方法名称(参数列表....);

       2.赋值调用: 把调用有返回值方法的返回的结果赋值给左侧的变量         ---代码语法格式错误---

       3.打印/输出调用: 把调用有返回值方法的返回的结果直接交给输出语句     ---代码语法格式错误---

三、方法的练习

3.1 练习一

package com.itheima03;

/*
    计算一个int数据是否是偶数
 */
public class Demo04MethodOu {
    public static void main(String[] args) {

        System.out.println("main....start....");

        int num = 100;

        //调用方法isOu,传递num,获取结果保存到boolean变量result中
        boolean result = isOu( num );

        System.out.println(num + " 是否是偶数? " + result);

        System.out.println("main....end....");
    }

    /*
        计算一个int数据是否是偶数
        三要素:
            (1)方法名称:                isOu
            (2)是否有未知数据参加运算:   int num
            (3)是否产生结果数据:         boolean
     */
    public static boolean isOu(int num) {
        //使用三元运算符,计算num是否是偶数
        boolean result = (num % 2 == 0) ? true : false;

        return result;//把结果数据result返回给调用这
    }
}

image

3.2 练习二

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
    /*数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试

    比如:

​	    小数数字 -6.6 的绝对值是 6.6

​	    小数数字 6.6 的绝对值是 6.6*/
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个小数:");
        double a =sc.nextDouble();
        double getjueduizhi=getJueDuiZhi(a);
        System.out.println("您输入的这个小数的绝对值是:"+getjueduizhi);
    }

    public static double getJueDuiZhi(double a) {
        /*if (a >= 0) {
            return a;
        } else {
            return -a;
        }*/
        return a>=0?a:-a;
    }
}

3.3 练习三

package com.itheima03;

import java.util.Arrays;

/*
    需求:
        定义方法,将一个int数字指定给一个int数组的每个元素

    三要素:
        (1)方法名称:
        (2)是否有未知数据参加运算:
        (3)是否产生结果数据:

    注意:
        1.分析需求时,发现方法内部没有产生具体的结果数据,返回值类型必须写成void
        2.方法内部可以写return ; 但是建议省略,绝对不能写 return 数据;
 */
public class Demo06FillArray {
    public static void main(String[] args) {
        System.out.println("main...start...");

        int[] arr = new int[10];

        System.out.print("数组元素默认值: ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();

        //调用fillArray方法,把数组中的所有元素值都修改为1000
        int num = 1000;
        fillArray(arr,num);

        System.out.print("数组元素修改后的值: ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();

        System.out.println("main...end...");
    }

    /*
        定义方法,将一个int数字指定给一个int数组的每个元素
        三要素:
        (1)方法名称:                fillArray
        (2)是否有未知数据参加运算:   int[] array,int value
        (3)是否产生结果数据:         没有具体的结果数据,此时返回值类型必须写为void
     */
    public static void fillArray(int[] array, int value) {
        for (int i = 0; i < array.length; i++) {
            array[i] = value;
        }
        return ;//结束方法,返回到方法的调用处,建议省略
    }
}

3.4 练习四

public class Demo07 {
    public static void main(String[] args) {
        //判断两个数据是否相等(整数和小数)
        int a =10;
        double b= 10.00000000000000000000000;
        boolean eq=equal(a,b);
        System.out.println(eq);
    }

    public static boolean equal(double a, double b) {
    //public static boolean equal(int a, double b) {   //这样定义变量也行
        return a==b;
    }
}

3.5 练习五

public class Demo05 {
    public static void main(String[] args) {
        //主方法中给定数组int[] arr= {10,20,30,40,50,60};这个数组没有重复元素.定义一个方法可以接受这个给定的数组并返回这个数组中最大元素值的索引值
        int[] array = {10,20,30,40,50,60};
        int get_index= getIndex(array);
        System.out.println("最大元素的索引值为:"+get_index);
    }

    public static int getIndex(int[] array) {
        int index=0;
        int max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (max < array[i]) {
                max = array[i];
                index = i;
            }
        }
        return index;
    }
}

3.6 练习六

package com.itheima03;
/*
    需求:
        定义方法,介绍黑马程序员昌平校区的地址
        "昌平区北七家镇七北路42号TBD云集中心2号楼3单元3层"

    三要素:
        (1)方法名称:                print
        (2)是否有未知数据参加运算:   没有未知数据参加运算,没有参数,不用写参数列表,但是必须保留()
        (3)是否产生结果数据:        没有具体的结果数据,此时返回值类型必须写为void

    注意:
        1.分析需求时,发现方法内部没有产生具体的结果数据,返回值类型必须写成void
        2.方法内部可以写return ; 但是建议省略,绝对不能写 return 数据;

    没有返回值没有参数的方法调用
        方法名称();
 */
public class Demo07PrintInfo {
    public static void main(String[] args) {

        System.out.println("main...start...");

        //调用方法,打印信息
        print();

        System.out.println("main...end...");
    }
    //定义方法,介绍黑马程序员昌平校区的地址
    public static void print() {

        System.out.println("昌平区北七家镇七北路42号TBD云集中心2号楼3单元3层");

        return ;//结束方法,返回到方法的调用处
    }
}

3.7 练习七

import java.util.Arrays;

public class Demo01 {
    /*需求:
    数组去重
    原数组: {1,9,8,6,3,5,1,9,8,7,2,6,6}
    去重后数组:
    {1,9,8,6,3,5,7,2}*/
    public static void main(String[] args) {
        int[] array = {1,9,8,6,3,5,1,9,8,7,2,6,6};
        int[] after_array = getArray(array);
        //int[] after_array = new int[count];
        //System.arraycopy(new_array,0,after_array,0,count);
        System.out.println(Arrays.toString(after_array));
    }

    public static int[] getArray(int[] array) {
        int[] new_array = new int[array.length];
        int count = 0;
        for (int i = 0; i <array.length ; i++) {
            boolean flag = true;
            for (int i1 = 0; i1 < i; i1++) {
                if (array[i] == array[i1]) { //判断在i索引前面是否有和array[i]相同的元素,如果没有则放到新的数组中
                    flag = false;
                    break;
                }
            }
            if (flag) {
                new_array[count] = array[i];
                count++;
            }
        }
        return Arrays.copyOf(new_array,count);
    }
}

3.8 练习八

public class Demo02 {
    public static void main(String[] args) {
        //判断两个数组  a = {1,2,3};  b = {1,2,3,4}; 是否相同?

        int[] a = {1,2,3};
        int[] b = {1,2,3,4};
        System.out.println("两个数组是否相同:" + isEquals(a,b));
    }

    public static boolean isEquals(int[] array1, int[] array2) {
        //如果两个数组名称指向同一个数组或者都为null
        if (array1 == array2) {
            return true;
        }
        //如果两个数组中只有一个为null
        if (array1 == null || array2 == null) {
            return false;
        }
        //如果两个数组的长度不相等的时候
        if (array1.length != array2.length) {
            return false;
        }
        for (int i = 0; i < array1.length; i++) {
            if (array1[i] != array2[i]) {
                return false;
            }
        }
        return true;
    }
}

四、定义方法的注意事项

  • 方法不能嵌套定义
public class MethodDemo {
    public static void main(String[] args) {

    }

    public static void methodOne() {
		public static void methodTwo() {
       		// 这里会引发编译错误!!!
    	}
    }
}
  • 返回值类型,必须要和return语句返回的类型相同,否则编译失败 。
// 返回值类型要求是int
public static int getSum() {
    return 5;// 正确,int类型
    return 1.2;// 错误,类型不匹配
    return (int)1.2;//正确,将double强制转换成int类型
    return true;// 错误,类型不匹配
    return 'c'; //正确,char数据可以当成int使用
    return 100L;//错误,100L本身是long类型
}
  • 不能在return 后面写代码,return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
public static int getSum(int a,int b) {
  	return a + b;
  	System.out.println("Hello");// 错误,return已经结束,这里不会执行,无效代码
}
  • void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
public class MethodDemo {
    public static void main(String[] args) {

    }
    public static void methodTwo() {
        //return 100; 编译错误,因为没有具体返回值类型
        return;	
        //System.out.println(100); return语句后面不能跟数据或代码
    }
}
  • 需要返回值时一定要return一个数据。没有return则报错
//第一种情况
public static boolean getIn(int a) {
        if (a >= 0) {
            return true;
        } else if (a < 0) {
            return false;
        } else {
            return true;      //这里必须要有else,如果没有则报错。就算前两个条件已经把所有的情况都包括了,也需要在后面写一个else
        }
    }
    
//第二种情况    
public static boolean getIn(int a) {
        if (a > 0) {
            return true;
        } else if (a < 0) {
            return false;
        }
        return true;     //也可以不写else,直接在后面写return一个数据。
    }
posted @ 2021-07-09 21:46  uoi  阅读(116)  评论(0)    收藏  举报