1. 程式人生 > >JavaSE之路10--函式

JavaSE之路10--函式

什麼是函式(必會): 完成特定功能的程式碼塊
看一個示例:

//定義了一個函式p1,列印金字塔
public static void p1(){
System.out.println(" *");
System.out.println(" ***");
System.out.println(" *****");
System.out.println(" *******");
}

//定義了一個函式p2,列印倒金字塔
public static void p2(){
System.out.println(" *******");
System.out.println(" *****");
System.out.println(" ***");
System.out.println(" *");
}

//在main函式中呼叫p1,p2.
public static void main(String[] args) {
p1();//呼叫函式p1
p2();//呼叫函式p2
}
注意:
1)p1,p2都是為了完成某個功能,都是一段程式碼
2)為了方便使用,將這段程式碼塊取個名字:p1,p2
3)以後在main函式中只要叫p1就相當於執行對應的程式碼塊
4)函式的目的:
1.為了提高程式碼的"重用"
2.分工明確(老婆主內,老公主外)
5)在java中將"函式"稱為"方法"

提問:如果要列印如下圖形怎麼辦?
*
***
*****
*******
*******
*****
***
*
*
***
*****
*******
*******
*****
***
*

如何定義方法(必會)
格式:
修飾符 返回值型別 方法名(引數型別 引數名1,引數型別 引數名2…) {
方法體;

        return 返回值;

  }

1)修飾符 比較多,後面會詳細介紹。目前public static
2)返回值型別:方法處理後返回的結果值型別
3)方法中的引數: 方法所需要的輸入變數
4)方法引數型別: 方法所需要的輸入變數的資料型別
5)return:通過return結束函式,並返回值到外界

生活示例1:
老婆說:小子!給你100塊錢,跟爺笑一個
方法名:小子
輸入變數:100塊錢
輸入變數型別:整數
返回值:一個笑
返回值型別:整數

生活示例2:
女王陛下說:小安子過來!家裡沒有醬油了,我給你10元錢,一代垃圾
你把垃圾扔掉,買瓶醬油回來
方法名:小安子
輸入變數有2個:10塊錢+一代垃圾
輸入變數型別:整數
返回值:一瓶醬油
返回值型別:整數

生活示例3: 今天是情人節,給女朋友買了一束鮮花,女朋友誇我很浪漫,給了我一個吻

方法名:情人節
輸入變數有1個:一束鮮花
輸入變數型別:整數
返回值:一個吻
返回值型別:整數

程式示例1:編寫一個方法fun_aver,實現功能:求2個整數的平均值
方法名:fun_aver
輸入變數:2個整數
輸入變數型別:int
返回值:2個數的平均值
返回值型別:double

參考程式碼:
public static double fun_aver(int n1,int n2) {
double result;
result=(n1+n2)/2.0;
return result;
}

注意:
1)n1,n2在定義時寫在方法()中的,被稱為 形參
2)形參的目的是為了讓"外界"在使用方法時能夠傳值給它們。
例如:f(x)=2x+1 其中的x就是形參
使用這個函式:f(3) 其中3這個值會傳給x–然後計算3*2+1=7
3)int result這個變數是定義在方法內部的變數,該變數是為了
完成方法本身的功能,自己定義的變數。

程式示例2:編寫一個方法fun_max,實現功能:求3個整數的最大值
方法名:fun_max
輸入變數:3個整數
輸入變數型別:整數
返回值:3個數的最大值
返回值型別:整數

public static int fun_max(int n1,int n2,int n3){

}

參考程式碼:
public static double fun_max(int n1,int n2,int n3) {
int max;
if(n1>n2){
max=n1;
}else{
max=n2;
}
if(max<n3){
max=n3;
}
return max;
}

程式示例3:編寫一個方法fun_jc,實現功能:求一個數的階層
方法名:fun_jc
輸入變數:1個整數
輸入變數型別:整數
返回值:3個數的階層
返回值型別:long (考慮到階層的範圍會超過 int範圍)

參考程式碼:
public static long fun_jc(int n) {
long result=1;
for(int i=1;i<=n;i++){
result=result*i;
}
return result;
}

注意:
1.方法與方法是平級關係,不能巢狀定義
2.方法定義的時候引數之間用逗號隔開

如何呼叫有返回值的方法(必會)
呼叫示例:
//在定義方法fun_aver
public static double fun_aver(int n1,int n2) {
double result;
double=(n1+n2)/2.0;
return result;
}

 //在main方法中呼叫該方法
 public static void main(String[] args) {
       double aver;
       aver=fun_aver(3,4);//直接寫死
       System.out.println(aver);
  }
 改成:
      public static void main(String[] args) {
       double aver,n1=3,n2=4;
       aver=fun_aver(n1,n2);//這樣n1,n2還可以由使用者通過鍵盤輸入,比較靈活
       System.out.println(aver);
  }

注意:
0.方法不呼叫,永遠不會執行
1.一般都是在main方法中呼叫自己定義的方法。
2.呼叫格式: 變數名=方法名(實參列表)
3.變數名用於將方法的結果儲存起來
4.方法呼叫的時候不用在傳遞資料型別,在定義的時候要指定資料型別(***)
5.實引數的變數名 和 形參的變數名可以相同也可以不同,不過為了程式碼的可讀性,一般都相同
6.方法一遇到return就會馬上結束方法.類似於break退出迴圈一樣

void關鍵字的方法(必會):
1)上述定義的幾個方法都是有返回值的,方法能否不返回值?
生活舉例:
老婆生氣:我給你10萬,你滾吧。
我:好,我滾,以後也不回來了
方法名:老婆生氣
輸入變數:10萬
輸入變數型別:整數
返回值:無

2)如果一個方法不返回值,則在定義方法將"返回型別"改成void
3)一般那些功能不需要返回值呢?
如果一個方法不是"業務規則計算",而是執行某個"動作",
這樣的方法非常適合定義成void的方法。

示例1:編寫一個方法,該方法能夠輸出n個空格
public static void print_space(int n){
for(int i=1;i<=n;i++){
System.out.print(" ");//注意不要換行
}
}
呼叫:
public static void main(String[] args) {
print_space(30);
System.out.println(“I LOVE YOU”);
}

說明:
1)如果一個方法被定義成void型別,則該方法中不充許出現 return 值 的表示式
2)對於外界也不能用變數名來儲存值
3)對於void型別的呼叫格式一般為:方法名(實參列表);

自定義方法的相互呼叫(必會):
1.到目前為止,我們都是main—>呼叫其它方法
2.main–>呼叫方法1–>呼叫方法2

示例1:輸出如下的圖形
如果要列印如下圖形怎麼辦?
*
***
*****
*******
*******
*****
***
*
*
***
*****
*******
*******
*****
***
*
思路:
1)定義一個方法用於列印上半形號–p1
2)定義一個方法用於列印下半形
號–p2
3)定義一個方法用於呼叫p1,p2完成輸出上面的星號–p
4)在main方法中呼叫p方法

示例2:讓使用者輸入2個數,求2個數的階層的和. 即:m!+n!
思路:
1)定義一個方法jc用於求階層
2)定義一個方法sum用於求2個數的和
3)定義一個方法calc用於計算結果
4)在main方法中呼叫calc