Java開發筆記(二十六)方法的輸出參數

前面介紹了方法的輸入參數,與輸入參數相對應的則爲輸出參數,輸出參數也被稱做方法的返回值,意思是通過方法的處理最終獲得的運算數值。這個返回值多是整型數,也多是雙精度數,也多是數組等其它類型,甚至容許不返回任何參數。與輸入參數相似,輸出參數也須要定義數據類型,它的返回值類型在方法名稱前面定義,具體位置參見方法的定義形式「訪問權限類型 可選的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開發筆記(序)章節目錄編譯器

相關文章
相關標籤/搜索