1. 程式人生 > 其它 >java方法之命令列傳遞引數、可變引數及遞迴

java方法之命令列傳遞引數、可變引數及遞迴

java方法

1.命令列傳遞引數

  • 有時候希望執行一個程式時侯再傳遞給它訊息。這要靠 傳遞命令列引數給main()函式實現
  • 注意
    • main函式後的引數是一個數組,string[] args,java中的陣列和C語言中的有所不同,int a[]為C語言中的陣列格式,而java中的陣列是int[] a,陣列名在後,資料型別在[]之前。
    • javac是編譯命令後面跟.java檔案;java是執行命令,後面直接跟檔名。

1.1 命令列傳參演示:

package method;

public class Demo04 {
    public static void main(String[] args) {
        for (int i = 0; i <args.length ; i++) {

            System.out.println("args["+i+"]:"+args[i]);
        }

    }
}


執行結果

C:\Users\安\Desktop\Hello>cd src

C:\Users\安\Desktop\Hello\src>cd main

C:\Users\安\Desktop\Hello\src\main>cd java

C:\Users\安\Desktop\Hello\src\main\java>cd method

C:\Users\安\Desktop\Hello\src\main\java\method>java Demo04
錯誤: 找不到或無法載入主類 Demo04

C:\Users\安\Desktop\Hello\src\main\java\method>java method.Demo04

C:\Users\安\Desktop\Hello\src\main\java\method>java method.Demo04 this is dog
args[0]:this
args[1]:is
args[2]:dog


  • IDEA中Terminal(終端)傳參步驟

    • 1.點開Terminal(終端)面板
    • 2.進入(cd)到類名(就是.java)的目錄處
    • 3.編譯java檔案:javac 類名.java
    • 4.在.class位元組碼檔案的包的上層包目錄下執行:java 包名.類名 傳遞的引數
  • 在cmd 黑窗中傳參步驟與終端傳參一樣,注意編譯和執行時一定要找到確切的路徑,不然會報:找不到或者無法載入主類的錯誤


——————————————————————————————————————————————————————————————————————

2.可變引數(不定項引數)

  • 當寫方法時有很多不確定的引數,那麼我們就需要寫好多的方法,但是這樣是特別的繁瑣和麻煩的。在JDK1.5開始,java支援傳遞同類型的可變引數給一個方法
  • 在方法宣告中,在指定引數型別後加一個省略號(...)
  • 注意: 一個方法中只能指定一個可變引數,它必須是方法的最後一個引數。任何普通的引數都必須在它之前宣告。

2.1 可變長引數以及非靜態方法的呼叫演示:

package method;

public class Demo08 {
    public static void main(String[] args) {
        Demo08 demo08 = new Demo08();

        demo08.test(33,66,88,99,77,55);//此處用了物件.方法名 來呼叫方法
        // 加了static修飾的方法可以直接在同一個類下的main方法中直接呼叫,而沒有加static修飾的方法需要new出類名物件,通過類名物件來呼叫非靜態方法。
    }

    public void test(int...args){
        System.out.println(args[0]);
        System.out.println(args[1]);
        System.out.println(args[2]);
        System.out.println(args[3]);
        System.out.println(args[5]);


    }


}


執行結果

33
66
88
99
55

2.2 可變長引數以及尋找最大值簡單呼叫演示:

package method;

public class Demo07 {
    public static void main(String[] args) {
        //        可變長引數
        max(10, 20,90,70,100);
        //max(new int[] {3,4,6,7,0});  //這裡由於max定義了int a 所以並不是陣列,也就無法new 新的陣列
                                      //若想new新的陣列需要把max 裡的int a刪除 或者重新寫一個沒定義的方法

    }
    public  static  void max(int a,int...ints){
        int result=ints[0];

        if(ints.length==0){
            System.out.println("沒有數值");
            return;//終止方法

        }
        /*for (int i = 1; i <ints.length ; i++) {
            if(ints[i]>ints[0]){       //二者比較時是變化的不能寫死了
                result=ints[1];

            }
        }
*/
        //排序尋找最大的數
        for (int i = 1; i <ints.length ; i++) {
            if(ints[i]>result){
                result=ints[i];

            }

        }

        System.out.println("輸入的數值中最大的是"+result);

    }

}

執行結果

輸入的數值中最大的是100

3.遞迴(自己呼叫自己)

  • A 方法呼叫 B 方法,我們很容易理解!

  • 遞迴就是:A 方法呼叫 A 方法!就是自己呼叫自己

  • 遞迴的作用

    • 利用遞迴可以用簡單的程式來解決一些複雜的問題。它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可貌似出解決過程所需要的多次重複計算,大大地減少了程式的程式碼量。遞迴的能力在於用有限的語句來定義物件的無限集合。
  • 遞迴結構包括兩個部分:

    • 遞迴頭:什麼時候不呼叫自身方法。如果沒有頭,將陷入死迴圈。

    • 遞迴體:什麼時候需要呼叫自身方法。

  • 遞迴適合小計算,如果太大量計算容易記憶體崩潰,宕機


3.1 使用遞迴計算演示

package method;

public class Demo09 {
    public static void main(String[] args) {

        Demo09 demo09 = new Demo09();//記住new 的是類的物件
        System.out.println(demo09.f(5));//由於沒有使用static 修飾 所以需要new物件後呼叫

    }
    //
    public int f(int n){
        if(n==1){
            return 1;
        }else {

            return n*f(n-1);
        }

    }

}


執行結果

120

4.案例

  • 寫一個計算器,要求實現加減乘除功能,並且能夠迴圈接收新的資料,通過使用者互動實現

  • 思路推薦

    • 寫4個方法:加減乘除
    • 利用迴圈+switch 進行使用者互動
    • 傳遞需要操作的兩個數
    • 輸出結果

4.1 計算器演示

package method;

import java.util.Scanner;

public class Demo10 {
    public static void main(String[] args) {


        while (true) {//while 死迴圈的使用

                Scanner scanner = new Scanner(System.in);
                System.out.println("請您輸入資料");
                double aDouble = scanner.nextDouble();
                System.out.println("請您輸入操作方式");
                String next = scanner.nextLine();
                System.out.println("請您輸入另一個數據");
                Double line = scanner.nextDouble();   //scanner  的學習使用


                switch (next) {   //switch  case 的學習使用
                    case "+":
                        double c = add(aDouble, line);  //方法呼叫後的引用
                        System.out.println(c);
                        break;

                    case "-":
                        System.out.println(subtract(aDouble,line));  //方法的直接使用
                        break;


                    case"*" :
                        System.out.println(ride(aDouble,line));
                        break;
                    case "/" :
                        System.out.println(division(aDouble,line));
                        break;
                    default:
                        System.out.println("資料無效");
                }

        }
    }

    //方法的學習使用

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

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

    public static double ride(double a,double b){
        return a*b;
    }
    public static double division(double a,double b){
        return a/b;
    }


}



執行結果

請您輸入資料
34
請您輸入操作方式
*
請您輸入另一個數據
2
68.0
請您輸入資料
77
請您輸入操作方式
/
請您輸入另一個數據
7
11.0
請您輸入資料
888
請您輸入操作方式
+
請您輸入另一個數據
2
890.0
請您輸入資料



5.更多參考

狂神說Java