Java基础: 方法,函数的调用

方法解释

//方法类似其他语言的函数
package com.cl.Method;

public class Demo01 {
    //main方法
    public static void main(String[] args) {
        int sum = add(1,2);
        System.out.println(sum);
    }

    //加法
    //需加static让它变成过一个类方法,main才能直接调用
    //实参:eg:main的a:1,b:2;
    //形参:由于定义作用的,eg:下面的a,b

    public static int add(int a, int b){

        //return返回的一个结果
       return a+b;
    }
    //拓展!!
    //值传递和引用传递
    //值传递:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对副本的操作,不影响原始实参的内容
    //引用传递:”引用”也就是指向真实内容的地址值,在方法调用时,实参的地址通过方法调用被传递给相应的形参,在方法体内,形参和实参指向通愉快内存地址,对形参的操作会影响的真实内容
    //Java都是值传递

调用可变参数

package com.cl.Method;

public class Demo03 {
    public static void main(String[] args) {
        //调用可变参数方法
        printMax(34,3,3,2,56.5);
        printMax(new double[]{1,2,3});
    }

    public  static void printMax(double... numbers){
        if (numbers.length==0){
            System.out.println("No argument passed");
            return;
        }

        double result=numbers[0];

        //排序!
        for(int i=1;i<numbers.length;i++){
            if (numbers[i]>result){
                result=numbers[i];
            }
        }
        System.out.println("The max value is"+result);
    }
}

*递归(重点)

//递归!!!
//递归结构包括两个部分:
//递归头:什么时候不调用自身方法,如果没头,将陷入死循环
//递归体:什么时候调用自身方法
package com.cl.Method;
//阶乘
public class Demo04 {
    //2! 2*1
    //31  3*2*1
    //5! 5*4*3*2*1
    public static void main(String[] args) {
        System.out.println(f(4));
    }
    //1! 1
    //2! 2*1
    //5! 5*4*3*2*1

    //2 2*f(1)
    //3 3*f(2)
    //阶乘:eg: 5的阶乘==5*(4*3*2*1)==5*f(4);
    public static int f(int n){

        if (n==1){
            return 1;
        }else{
            return  n*f(n-1);
        }
    }
}
//递归缺点:时间复杂度高
//我认为递归本身不重要,他的思想重要

练习:加减乘除计算器

package com.cl.Method;
//练习:加减乘除计算器
import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        menu();
    }

    public  static int add(int a,int b){
        return a+b;
    }

    public static  double jian(int a,int b){
        return a-b;
    }

    public  static  double cheng(int a,int b){
        return a*b;
    }

    public static  double chu(int a,int b){
        return a/b;
    }


    public static void menu(){
        int a,b,c;
        System.out.println("please input database:");
        System.out.println("1,add\t2,jian\t3,cheng\t4,chu");
        Scanner scanner = new Scanner(System.in);
        a=scanner.nextInt();
        switch(a){
            case 1:

                b=scanner.nextInt();
                c=scanner.nextInt();
                System.out.println("值:"+add(b,c));
                break;
            case 2:
                b=scanner.nextInt();
                c=scanner.nextInt();
                System.out.println("值:"+jian(b,c));
                break;
            case 3:
                b=scanner.nextInt();
                c=scanner.nextInt();
                System.out.println("值:"+cheng(b,c));
                break;
            case 4:
                b=scanner.nextInt();
                c=scanner.nextInt();
                System.out.println("值:"+chu(b,c));
                break;
            default:
                break;
        }
        scanner.close();

    }
}