前面介紹了方法的輸入參數,與輸入參數相對應的則爲輸出參數,輸出參數也被稱做方法的返回值,意思是通過方法的處理最終獲得的運算數值。這個返回值多是整型數,也多是雙精度數,也多是數組等其它類型,甚至容許不返回任何參數。與輸入參數相似,輸出參數也須要定義數據類型,它的返回值類型在方法名稱前面定義,具體位置參見方法的定義形式「訪問權限類型 可選的static 返回值的數據類型 方法名稱(參數類型 參數名稱)」。
這裏特別要注意,即便方法不返回任何輸出參數,也需定義一個名叫void的返回值類型,而不像輸入參數若沒有則直接留空。方法內部假若中途就要結束處理,那要在指定地點添加一行「return;」,表示代碼執行到這裏便退出方法。對於無需返回輸出參數的方法,方法末尾既可添加「return;」,也可不添加「return;」,由於此時編譯器會自動結束方法。
接下來以求數字的N次方根爲例,演示看看如何實現一個返回值類型爲void的printNsquareRoot方法。該方法的輸入參數包括待求N次方根的數字,以及N次方根的整型數n,爲了不程序運行出錯,必須在方法一開頭就進行合法性判斷,好比N次方根的n必須是天然數,而不能是0或負數;又好比進行開偶次方根運算時,底數不能爲負數;一旦輸入參數的合法性校驗不經過,就應當跳過剩餘代碼直接結束方法。據此給出方法printNsquareRoot的示例代碼:html
// 不返回任何數據,也就是不存在輸出參數,則返回值類型填void。 // printNsquareRoot的用途是打印指定數字的N次方根 private static void printNsquareRoot(double number, int n) { if (n <= 0) { System.out.println("n必須爲天然數"); return; // 不帶任何參數直接返回,return語句表示該方法的剩餘代碼都不予執行 } else if (n%2==0 && number<0) { System.out.println("不能對負數開偶次方根"); return; // 不帶任何參數直接返回,return語句表示該方法的剩餘代碼都不予執行 } // 下面利用牛頓迭代法求數字的N次方根 double nsquareRoot = number; for (int i=0; i<n*2; i++) { nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n; } System.out.println(number+"的"+n+"次方根="+nsquareRoot); //return; // 若是方法的返回值類型爲void,則方法末尾的return語句可加可不加 }
由於printNsquareRoot方法不返回具體參數,因此外部可經過格式「方法名稱(逗號隔開的參數列表)」調用該方法。下面即是外部調用printNsquareRoot方法的代碼例子:java
// 下面的printNsquareRoot方法打印指定數字的N次方根 printNsquareRoot(2, 2); // 求數字2的2次方根,即對2開平方
固然許多時候咱們更但願求方根方法可以返回具體方根數值,那麼就要將方法的返回值類型從void改成double,而且凡是須要結束方法處理的地方,都得使用語句「return 方根數值;」返回輸出參數,而且方法末尾必須寫明return語句。因而求方根方法便改爲了以下的代碼:數組
// 只返回一個數值,則返回值類型填該數值的變量類型。 // getNsquareRoot的用途是計算並返回指定數字的N次方根 private static double getNsquareRoot(double number, int n) { if (n <= 0) { System.out.println("n必須爲天然數"); return 0; // 輸入參數非法,則默認返回0 } else if (n%2==0 && number<0) { System.out.println("不能對負數開偶次方根"); return 0; // 輸入參數非法,則默認返回0 } // 下面利用牛頓迭代法求數字的N次方根 double nsquareRoot = number; for (int i=0; i<n*2; i++) { nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n; } return nsquareRoot; // return後面跟着要返回的變量名稱,該變量的類型與返回值類型保持一致 }
既然改寫後的getNsquareRoot方法存在輸出參數,那麼外部調用該方法時,應當定義一個變量用來接收方法的返回值,就像下面代碼示範的這樣:測試
// 下面的getNsquareRoot方法返回指定數字的N次方根 double number1 = 3; int n1 = 2; double nsquareRoot = getNsquareRoot(number1, n1); System.out.println(number1+"的"+n1+"次方根="+nsquareRoot);
運行上面的方法調用代碼,程序的日誌輸出結果以下所示:日誌
3.0的2次方根=1.7320508100147274
從日誌發現,getNsquareRoot方法在計算數字的偶次方根時,只會返回正值方根。這實際上是不嚴謹的,好比3和-3都是9的平方根,然而getNsquareRoot方法只返回3,卻把-3給漏掉了。所以須要對該方法加以完善,可考慮將返回值類型改成數組,這樣偶次方根的正值和負值都能經過數組返回。因而從新定義一個getNsquareRootArray方法,同時新方法的返回值類型爲double[],並修改相關的return語句,把返回的輸出參數通通改成數組類型。通過數組改造後的getNsquareRootArray方法代碼以下所示:htm
// 須要返回多個數值(包括0個、1個、2個以及更多),則返回值類型能夠填這些數值的數組類型。 // getNsquareRootArray的用途是計算並返回指定數字的N次方根數組(好比2和-2都是4的平方根) private static double[] getNsquareRootArray(double number, int n) { if (n <= 0) { System.out.println("n必須爲天然數"); return new double[]{}; // 輸入參數非法,則默認返回一個空的雙精度數組 } else if (n%2==0 && number<0) { System.out.println("不能對負數開偶次方根"); return new double[]{}; // 輸入參數非法,則默認返回一個空的雙精度數組 } // 下面利用牛頓迭代法求數字的N次方根 double nsquareRoot = number; for (int i=0; i<n*2; i++) { nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n; } double[] rootArray; if (n%2 == 0) { // 求偶次方根,則方根有正值和負值兩個數值 rootArray = new double[]{nsquareRoot, -nsquareRoot}; } else { // 求奇次方根,則方根只會有一個數值 rootArray = new double[]{nsquareRoot}; } return rootArray; // return後面跟着rootArray,其變量類型與返回值類型同樣都是雙精度數組 }
外部調用getNsquareRootArray方法的時候,須要聲明一個雙精度數組變量,並將方法的輸出參數賦值給該變量。下面是外部調用getNsquareRootArray方法的代碼例子:blog
// 下面的getNsquareRootArray方法返回指定數字的N次方根數組 double number2 = 3; int n2 = 2; double[] rootArray = getNsquareRootArray(number2, n2); for (double root : rootArray) { System.out.println(number2+"的"+n2+"次方根="+root); }
運行上述測試代碼,日誌打印結果以下所示:開發
3.0的2次方根=1.7320508100147274 3.0的2次方根=-1.7320508100147274
可見最新的getNsquareRootArray方法,在計算數字的偶次方根之時,正確返回了兩個正負方根。get
更多Java技術文章參見《Java開發筆記(序)章節目錄》編譯器