十一、方法的使用
第1關:如何定義方法
任務描述
本關任務:定義一個用來和老師打招呼的方法。
相關知識
為了完成本關任務你需要掌握:1. 什么是方法; 2. 怎么定義和使用方法。
我們現階段編寫的代碼都是放在main函數中,不過如果我們要做一個大型的項目,把所有的代碼都放入main方法中有什么缺陷呢?
代碼龐大;
難以閱讀;
難以維護;
代碼難以重用;
不利于合作開發。
怎么解決呢?
將龐大的程序劃分為不同的功能小塊,逐個突破,就像手機和電腦一樣,把一整個電腦拆分成一個個的小功能塊,例如內存,CPU等。然后在主板中將這些功能模塊組合。
這里主板就相當于main方法,CPU,內存這些模塊,就相當于我們自己定義的方法,接下來我們就來認識一下Java中的方法吧!
什么是方法
方法也叫函數,就是用來解決一類問題的代碼的有序組合,是一個功能模塊。
怎么定義和使用方法
一般情況下,定義一個方法的語法是:
其中:
訪問修飾符:在現階段你只需要記住訪問修飾符都用public即可;
返回值類型:方法返回值的類型,如果方法不返回任何值,則返回值類型指定為void;如果方法具有返回值,則需要指定返回值的類型,并且在方法體中使用return語句返回值;
方法名:定義的方法的名字,必須使用合法的標識符;
參數列表:傳遞給方法的參數列表,參數可以有多個,多個參數間以逗號隔開,每個參數由參數類型和參數名組成,以空格隔開。
根據方法是否帶參、是否帶返回值,可將方法分為四類:
無參無返回值方法;
無參帶返回值方法;
帶參無返回值方法;
帶參帶返回值方法。
在本關你需要學習的是無參數無返回值方法。
方法的使用分兩步:
第一步,定義方法:
例如:下面代碼定義了一個方法名為 helloEducoder ,沒有參數,且沒有返回值的方法,執行的操作為輸出 welcome to educoder。
注意哦:
方法體放在一對大括號中,實現特定的操作;
方法名主要在調用這個方法時使用,需要注意命名的規范,一般采用第一個單詞首字母小寫,其它單詞首字母大寫的形式;
現階段我們使用的方法都是static(靜態的)。
第二步:調用方法:
輸出:
welcome to educoder編程要求
根據提示,在右側編輯器Begin-End處補充代碼,定義一個方法名為hello的方法用來和老師打招呼;
調用此方法輸出如下結果:
測試說明
平臺會對你編寫的代碼進行測試,若與預期輸出相同,則算通關。
代碼實現
package step1;public class HelloWorld {/********** Begin **********///定義一個方法,用來和老師打招呼/********** End **********/ public static void main(String[] args) {/********** Begin **********/ helloEducoder();}public static void helloEducoder() {System.out.println("hello teacher!");}/********** End **********/}第2關:掌握無參有返回值方法的調用
任務描述
定義一個方法,用來計算兩門課程成績的平均值,并返回結果。
相關知識
如果方法不包含參數,但有返回值,我們稱為無參帶返回值的方法。
例如:下面的代碼,定義了一個方法名為 numberPlus ,無參數,但返回值為 int 類型的方法,執行的操作為計算兩數之和,并返回結果。
在 numberPlus() 方法中,返回值類型為 int 類型,因此在方法體中必須使用 return 返回一個整數值。
調用帶返回值的方法時需要注意,由于方法執行后會返回一個結果,因此在調用帶返回值方法時一般都會接收其返回值并進行處理。如:
回顧與展望
在上一節中你已經掌握了無參數無返回值方法的調用,這一節將要掌握有返回值方法的調用。
一定不可忽視的問題
1、 如果方法的返回類型為 void ,則方法中不能使用 return 返回值!
2、 方法的返回值最多只能有一個,不能返回多個值。
3、 方法返回值的類型必須兼容,例如,如果返回值類型為 int ,則不能返回 String 型值。
編程要求
請根據任務描述 ,在編輯器Begin-End中定義一個名為 calcAvg 的方法,用來計算兩門課程成績的平均值,并返回結果。
測試說明
程序會對你編寫的代碼進行測試:
需要你的程序輸出:
平均成績為:87.75
代碼實現
package setp7; public class HelloWorld {public static void main(String[] args) {/********** Begin **********/// 調用calcAvg()方法,并將返回值保存在變量avg中double avg = calcAvg(); /********** End **********/System.out.println("平均成績為:" + avg);}// 定義一個返回值為double類型的方法/********** Begin **********/public static double calcAvg() {double java = 92.5;double php = 83.0;double avg = (java + php) / 2; // 計算平均值return avg;// 使用return返回值/********** End **********/} }第3關: 掌握有參數無返回值方法的調用
任務描述
本關任務:編寫帶參方法計算兩門課程考試成績的平均分。
相關知識
有時方法的執行需要依賴于某些條件,就像生活中我們做一件事情時,也許需要前提條件,而方法的參數就相當于前提條件。
我們先來看一個帶參數,但沒有返回值的方法:
/* *帶參無返回值 */ public static void show(String name){System.out.println(name); }上面的代碼定義了一個 show() 方法,帶有一個參數 name ,實現輸出歡迎消息。
調用帶參方法與調用無參方法的語法類似,但在調用時必須傳入實際的參數值。
例如:
public static void main(String[] args) {//調用方法,得到結果show("我是Java愛好者"); }運行后控制臺打印結果為:
我是Java愛好者很多時候,我們把定義方法時的參數稱為形參,目的是用來定義方法需要傳入的參數的個數和類型;把調用方法時的參數稱為實參,是傳遞給方法真正被處理的值。
一定不可忽視的問題:
1、 調用帶參方法時,必須保證實參的數量、類型、順序與形參一一對應。
2、 調用方法時,實參不需要指定數據類型,如。
public static void main(String[] args) {//調用方法,得到結果show("我是Java愛好者"); }3、 方法的參數可以是基本數據類型,如 int、double 等,也可以是引用數據類型,如 String、數組等。
4、 當方法參數有多個時,多個參數間以逗號分隔。
public static int test(int number1 , int number2){System.out.println("內部邏輯"); }編程要求
根據提示,在右側編輯器Begin-End處補充代碼,編寫并調用求平均值的方法,傳入兩門成績,求出平均值。
測試說明*
測試輸入:90,80
預期輸出:
測試輸入:100,90
預期輸出:
代碼實現
package setp9;import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int score1 = sc.nextInt(); //第一門成績int score2 = sc.nextInt(); //第二門成績/********** Begin **********/// 調用方法,傳入兩門課程的成績HelloWorld.calcAvg(score1,score2);/********** End **********/}/** 功能:計算兩門課程考試成績的平均分并輸出平均分* 定義一個包含兩個參數的方法,用來傳入兩門課程的成績*//********** Begin **********/public static void calcAvg(int score1,int score2){int avg=(score1+score2)/2;System.out.print("平均分:"+avg);}/********** End **********/}第4關:掌握有參數有返回值方法的調用
任務描述
本關任務:定義一個有參數有返回值方法(函數)并調用。
相關知識
要完成本關任務你需要掌握:1.怎么定義有參數有返回值的方法,2.怎么調用。
怎么定義有參數有返回值的方法
如果方法既包含參數,又帶有返回值,我們稱為帶參帶返回值的方法。
例如:下面的代碼,定義了一個 welcome 方法,帶有一個參數 name ,方法執行后返回一個 String 類型的結果。
怎么調用
調用帶參帶返回值的方法:
運行結果為: 歡迎你張三豐
編程要求
在Begin-End區域創建一個 名為getMax的方法,以兩個整數作為參數, 返回兩個整數變量較大的值,最后在main方法中調用該方法,傳入輸入的數據。
測試說明
測試輸入:5,4
預期輸出:
測試輸入:2,3
預期輸出:
代碼實現
package step3;import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {HelloWorld hello=new HelloWorld();Scanner sc = new Scanner(System.in);int i = sc.nextInt(); //獲取第一個輸入的整數int j = sc.nextInt(); //獲取第二個輸入的整數int max = hello.getMax(i,j);/********** Begin **********///在這里調用方法獲取返回值System.out.println( i+"和"+j+"比較,最大值是:" + max );/********** End **********/}/*在這里創建getMax方法,以兩個整數作為參數,返回兩個整數中較大的值*//********** Begin **********/public static int getMax(int i,int j){if(i>j)return i;elsereturn j;}/********** End **********/ }第5關:掌握數組作為參數的使用
任務描述
本關任務:將考試成績排序并輸出,返回成績的個數。
相關知識
數組作為參數的樣例:
輸出結果。 1 2 3
實現思路
定義一個帶有數組參數的方法;
在方法內部參考第八章數組排序將數組排序,并且打印;
返回數組的長度信息。
提示
快速輸出數組的方法:
驗貨啦,驗貨啦,開始你的任務吧!
編程要求
根據提示,在右側編輯器Begin-End處補充代碼,程序給出了部分代碼,您需要參照實現思路達到 任務描述的需求。
測試說明
程序會對你編寫的代碼進行測試:
需要你的程序輸出下圖所示:
代碼實現
package setp10;import java.util.Arrays;public class HelloWorld {public static void main(String[] args) {HelloWorld hello=new HelloWorld();int[] scores={79,52,98,81};/********** Begin **********///調用方法,傳入成績數組,并獲取成績的個數int count= hello.sort(scores);/********** End **********/System.out.println("共有"+count+"個成績信息!");}/** 功能:將考試成績排序并輸出,返回成績的個數* *//********** Begin **********/ public static int sort( int[] data ){for(int i=0;i<data.length-1;i++)for(int j=i+1;j<data.length;j++){if(data[i]>data[j]){int temp=data[i];data[i]=data[j];data[j]=temp;}}// 打印出數組System.out.print("[");for(int i=0;i<data.length-1;i++) System.out.print(data[i]+", "); System.out.print(data[3]+"]"); System.out.println();//返回數組中元素的個數return data.length;} }/********** End **********/第6關:方法的重載
任務描述
本小節需要你掌握一個Java方法重載的小程序,在每一個重載的方法中打印相應的語句。
相關知識*
問: 什么是方法的重載呢?
答: 如果同一個類中包含了兩個或兩個以上方法名相同,方法參數的個數、順序或類型不同的方法,則稱為方法的重載,也可稱該方法被重載了。如下所示 3 個方法名稱都為 print ,但方法的參數有所不同,因此都屬于方法的重載:
問: 如何區分調用的是哪個重載方法呢?
答: 當調用被重載的方法時,Java會根據參數的個數和類型來判斷應該調用哪個重載方法,參數完全匹配的方法將被執行。如:
public static void main(String[] args) {// 調用無參的方法print();// 調用帶有一個字符串參數的方法print("小強");// 調用帶有一個整型參數的方法print("老肖",38);}運行結果:
無參的print方法 帶有一個字符串參數的print方法,參數值為:小強 您好老肖,今年38歲判斷方法重載的依據:
1、 必須是在同一個類中;2、 方法名相同;3、 方法參數的個數、順序或類型不同;4、 與方法的修飾符或返回值沒有關系。敲黑板
方法重載:在同一個類中,方法名相同,參數類型不同。
編程要求
在編輯器Begin-End處對print方法進行重載,并通過傳入不同的參數調用匹配的重載方法。
請在相應行中將代碼填寫完整。
測試說明
預期輸出:
代碼實現
package setp15;/*** @author tangzhiqiang* @date 2018-04-25 22:31*/ public class HelloWorld {public static void main(String[] args) {/********** Begin **********/// 調用無參的方法print();// 調用帶有一個字符串參數的方法 print("educoder");// 調用帶有一個整型參數的方法print(666);/********** End **********/}/********** Begin **********/// 無參print方法的定義 public static void print(){System.out.println("無參的print方法"); }// 字符串print方法的定義 public static void print(String name){System.out.println("帶有一個字符串參數的print方法,參數值為:"+name);}// 整型print方法的定義 public static void print(int id){System.out.println("帶有一個整型參數的print方法,參數值為:"+id); }/********** End **********/ }第7關:方法通關挑戰
任務描述
本關任務:
定義一個方法,接收兩個int類型的參數 a和b,求兩個數的和,方法名為:getSum;
定義一個方法,接收三個double類型參數a,b,c, 返回這三個數的平均值 返回值類型為double,方法名為:getAvg;
定義一個方法,接收兩個整數 a 和b 打印a行 b列的一個矩形,方法名為:printRect;
定以一個方法,接收整形數組為參數,對這個數組進行升序排序,最后輸出該數組,方法名為:sortArr;
定義一個方法,完成99乘法表的打印,方法名為 :Print99。
相關知識
編程要求
根據任務描述,在右側編輯器Begin-End處補充代碼,定義五個方法,并編寫代碼實現方法對應的功能,達到輸出要求。
測試說明
我會對你編寫的代碼進行測試:
第一題:求和
測試輸入:1,2
預期輸出:
3第二題:求平均值
測試輸入:1,2,3
預期輸出:
第三題:輸出矩形
測試輸入:2,3
預期輸出:
第四題:數組升序排序
測試輸入:5,7,12,9,32
預期輸出:
5 7 9 12 32第五題:打印99乘法表
測試輸入:無
預期輸出:
代碼實現
package setp17;import java.util.Arrays; import java.util.Scanner;public class HelloWorld {/********** Begin **********//*** 第一題:定義一個方法 接收兩個整數類型的參數 a和b,返回兩個數的和 返回值類型為int 方法名為:getSum*/ public static int getSum(int a ,int b){int sum = a + b;return sum;}/*** 第二題: 定義一個方法 接收三個double類型參數a,b,c, 返回這三個數的平均值 返回值類型為double 方法名為:getAvg*/ public static double getAvg(double a ,double b,double c){double avg = (a + b + c) / 3;return avg;}/*** 第三題: 定義一個方法 接收兩個參數 a 和b 打印a行 b列的一個矩形 不需要返回值 方法名為:printRect*/ public static void printRect(int a , int b){for (int i = 1 ; i <= a ;i++) {for (int k = 1 ; k <= b;k++){System.out.print("*");}System.out.println();}}/*** 第四題:定以一個方法,接收整形數組 為參數 對這個數組進行升序排序 最后輸出該數組 不需要返回值 方法名為 sortArr */ public static void sortArr(int[] arr){for(int i = 0; i< arr.length-1;i++){for(int j = i+1; j< arr.length;j++){if(arr[i] > arr[j]){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}for(int i = 0; i< arr.length;i++){System.out.println(arr[i]);}}/*** 第五題* 你只需要實現for 循環括號的內容就可 ,打印語句系統已經給你完成 */public static void Print99() {for (int i = 1 ; i<=9;i++) {for (int j = 1;j <= i ;j++) {System.out.print(j + " * " + i + " = " + i * j + "\t");}System.out.println();}}/********** End **********/}總結
- 上一篇: C++初级程序员笔试题总结
- 下一篇: VC2017编译OpenCV