# 狂神說Java學習筆記 : Java方法 *** > **即使再小的帆也能遠航** >**本篇學習筆記參考自[狂神說](https://www.bilibili.com/video/BV12J41137hu/)** >###### tags: `狂神說Java` `Java基礎` *** # 什麼是方法? - 大原則 : 一個方法只完成一個功能,如此有利於後續功能擴展。  *** # 方法的定義和調用 - Java方法類似於其他程式語言的函數,用來完成特定功能的程式片段 - 命名規則 ```java 修飾符 返回值類型 方法名(參數類型 參數名){ ... 方法體 ... return 返回值 } ``` - 兩種調用方式 - 會返回值的,通常被當作一個值 ``` java int larger = max(10 ,20); ``` - 返回為void,則一定為語句 ``` java System.out.println("Hello World!") ``` - 補充 : Java 屬於**值傳遞** - 還有一種是引用傳遞,概念為C的指標 (地址傳遞)。 - [補充文章](https://www.kuangstudy.com/bbs/1382226379252191234) *** # 方法的重載 - **定義 :** 在一個類中,有相同的函數名稱,但***形參不同***的函數 - **方法名稱相同** - **參數列表必須不同(個數、類型、排列順序)** - 返回類型可以相同或不相同  *** # 命令行傳遞參數 ```java= package method; public class Demo03 { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "]:" + args[i]); } } } ``` - cd ..是為了處理package位置的問題  # 可變參數 - 又稱"不定項參數",從JDK 1.5開始支援 - 聲明方法 : 指定參數類型後加省略號(*e.g.* double...) - 一個方法只能有一個可變參數,且必須是最後一個參數,任何普通參數都得在他前面聲明 - 本質即為下一章的**數組** ```jav= package method; public class Demo04 { public static void main(String[] args) { // 調用可變參數的方法 printMax(34, 3, 3, 2, 56.6); 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); } } ``` *** # 遞歸 - 遞歸一定要有終點,否則會死循環 - **能不用遞歸就不用遞歸**,除非層數較小 ```java= public class Demo06 { // 階層 public static void main(String[] args) { System.out.println(factorial(5)); } public static int factorial(int n){ if (n == 1){ return 1; } else{ return n * factorial(n-1); } } } ``` *** # 作業 : 簡易計算機 - 寫一個計算機,要求實現加減乘除功能,並且能夠循環接收新的數據,通過用戶交互實現。 - 思路推薦: 1. 寫四個方法 : 加減乘除 2. 利用循環 + switch進行用戶交互 3. 傳遞需要操作的兩個數 4. 輸出結果 - 自己的方法 - 沒有很全面,但正常使用不會有問題。 - 有趣的地方,"==" 用於比較位址,"equals"才能比較是否相等 ```java= import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean flag = true; while (flag) { // Input first number double num1 =0; System.out.print("請輸入第一個數: "); num1 = scanner.nextDouble(); // Input Operator String op = ""; System.out.print("請輸入運算元: "); op = scanner.next(); // Input second number double num2 =0; System.out.print("請輸入第二個數: "); num2 = scanner.nextDouble(); // Calculation double result = 0.0; result = calculator(num1, op, num2); System.out.println("The result is : " + result); // One more time? System.out.println("還要再繼續使用嗎(y/n)?"); if ( scanner.next().equals("n") ){ flag = false; } } scanner.close(); } public static double calculator(double a, String operator, double b){ switch (operator) { case "+": return a+b; case "-": return a-b; case "*": return a*b; case "/": return a/b; default: System.out.println("Wrong Operator!!"); return 0.0; } } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up