天天看點

JavaSE-05 Method方法JavaSE

JavaSE

五、Method方法

  1. 方法的基本調用
  • Demo1-1:形參、實參
public static void main(String[] args) {
                //直接(兩者都是static)調用:這邊的參數叫實參,實參可以傳遞給到形參
                int sum = add(1, 2);
                System.out.println(sum);
            	}

           //add方法:這邊add的參數叫形式參數,形參的名字可以随便寫啥,但是形參和實參類型要一一對應
          public static int add(int a,int b){
                //a+b就是方法體
                return a+b;
            	}
			}			
           
  • Demo1-2:把功能打包成一個方法并調用
public static void main(String[] args) {
            //調用test方法
            test();
        }

        public static void test(){//void表示傳回為空

            for (int i = 0; i <= 1000; i++) {
                if (i % 5 == 0) {
                    System.out.print(i + "\t");
                }

                if (i % (5 * 3) == 0) {
                    System.out.print("\n");//或者System.out.println();
                }
            }
        }
           
  • Demo2:寫個比大小的方法
public static void main(String[] args) {

            int max = max(12, 13);
            System.out.println(max);//把傳回值打出來
        }

        //比大小
        public static int max(int num1,int num2){
            
            int result = 0;

            if(num1==num2){
                System.out.println("num1=num2");
                return 0;//return還可以終止方法
            }

            else if(num1>num2) {
                result = num1;

            }else {
                result = num2;
            }

                return result;//return給他放在外面來,整個result接收,但是記得初始化


        }
           
public static void main(String[] args) {
            int max1 = max(1,2);
            System.out.println(max1);
        }


        public static int max(int num1,int num2){

            if(num1 == num2){
                System.out.println("num1=num2");
                return 0;

            }else if(num1>num2){
                return num1;
            }else{
                return num2;

            }
        }
           
  1. 方法的重載
  • Demo3:方法名相同,參數類型不同
public static void main(String[] args) {


            double max = max(12, 13);
            System.out.println(max);//把傳回值打出來
              }

        public static int max(int num1,int num2){
            int result = 0;

            if(num1==num2){
                System.out.println("兩者相等");
                return 0;
            }else if (num1>num2){
                result = num1;
            }else if (num1<num2){
                result = num2;
            }

            return result;
        }


        public static double max(double num1,double num2){
            double result = 0;

            if(num1==num2){
                System.out.println("兩者相等");
                return 0;
            }else if (num1>num2){
                result = num1;
            }else if (num1<num2){
                result = num2;
            }

            return result;
        }
           
  1. 指令行傳參:
  • Demo3:周遊main方法
//args.length  數組長度  psvm的main方法中是可以傳遞參數的
			for (int i = 0; i < args.length; i++) {//這個是在周遊參數
            System.out.println("args["+i+"]:"+args[i]);
        }
           
  • 指令行傳參:給main方法傳遞參數
  1. 可變參數
  • Demo4:設定一個可變參數
public static void main(String[] args) {
            //可變參數可以了解為:不知道需要傳入多少參數而設定的,可以避免方法的多次重載
            Demo4 demo4 = new Demo4();
            demo4.test(1,2,3,4,5);
             /*
            下面的方法沒有static,如果有直接:
            test(1,2,3,4,5);
             */
        }

        //用...表示可以有很多參數(可變參數,并且其他參數必須放在最前面
        public void test(int x,int... i){
            System.out.println(i[2]);
            System.out.println(x);

        }
           
  • Demo5:寫一個找傳入參數最大值的代碼
public static void main(String[] args) {

            printMax(3,31,4,56,7,3);
            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(result);

        }
           
  1. 遞歸
  • Demo6:方法自己調用自己
public static void main(String[] args) {
                Demo6 demo6 = new Demo6();
                demo6.test();

            }

            public void test(){
                test();
            }

  			//自己調用自己,抛出異常:棧溢出
           
  • Demo7:利用遞歸寫一個階乘
public static void main(String[] args) {
            System.out.println(f(5));

        } 
        //自己調用自己,階層的例子

        /*遞歸需要的條件:
        邊界條件:邊界(最後一個就會執行到底
        前階段:一直調用的時候
        傳回階段n*n-1

        棧機制:壓了好幾個棧  要考慮記憶體的情況
        學到的是遞歸思想:一層一層的往下解決
         */
        public static int f(int n){
            if(n==1){
                return 1;
            }else {
                return n*f(n-1);
            }

        }