Java 方法宣告與流程 - 翻轉工作室

文章推薦指數: 80 %
投票人數:10人

import java.util.*;. /* Ex6_1 類別開始 */. public class Ex6_1 {. /* main 方法開始 */. public static void main(String args[]) {.  Java 程式設計(一)  :第 六章 方法與套件引用  上一頁    下一頁   6-2方法宣告與流程 內容: 6-2-1 方法的宣告 6-2-2 範例研討:加法器函數製作 6-2-3 範例研討:比較大小方法製作 6-2-4 範例研討:麻將選擇出牌順序 6-2-5 自我挑戰:擲骰子博弈遊戲 6-2-1方法的宣告      在某一程式內,我們大多會將些特殊功能並會重複使用的程式,編寫成一個方法(或稱為函數),讓它可以被重複呼叫使用。

另一方面,為了實現方法特殊功能(如,加法器),它被呼叫時允許呼叫者植入相關『引數』(如,加數與被加數);執行完後,也會回覆執行結果(如,兩數的和)。

為了達到上述功能,宣告方法的語法如下: 宣告方法(函數)語法: 範    例 方法屬性 傳回值型態 方法名稱 (引數_1, 引數_1) { 方法實體 … …… return 傳回值; } staticint ADD(inta,intb){ intc; c=a+b; returnc; } 呼叫方法 範     例 資料型態 變數名稱=方法名稱(引數, ..); intsum=ADD(3,5); 相關參數如下: (1)方法屬性:可被引用(呼叫)的屬性,常用有下列組合型態:      (a)publicstatic:允許類別外部呼叫的靜態(或稱類別)方法。

      (b)privatestatic:僅允許類別內其他方法呼叫的靜態方法。

      (c)static:如同publicstatic屬性。

(2)傳回值型態:宣告執行該方法後,得到結果的資料型態,可宣告為一般資料型態(int、float、char...等)、或某一物件型態(object),如果不回傳任何值,則宣告為void(空)。

(3)方法名稱:指定該方法(或函數)名稱,與一般變數名稱相同。

(4)引數:呼叫該函數時,可以攜帶的引數,可以是變數、或數值。

(5){……}:函數的程式主體。

(6)return變數(或敘述句):執行後將變數(或敘述句)內容回傳,該資料型態必須與『傳回值型態』相同。

譬如,『主方法』(或稱主函數)是不需經由產生物件再執行,而可以直接執行的(static屬性),並允許外部環境呼叫它(public屬性),執行後也不會傳回任何資料(void傳回值型態);因此,宣告主方法的相關參數為publicstaticvoidmain(..)。

宣告方法 (函數) 範例: publicstaticvoidmain(String args[]){ …… ……     //“空” (void)傳回值,不需要 return } 6-2-2範例研討:加法器函數製作 (A)系統功能:Ex6_1.java 請製作一個兩數相加的加法器函數,於主程式會要求輸入兩個整數,再呼叫加法器球兩整數的和,最後印出兩數相加的結果。

期望操作介面如下: 請輸入第一個整數 =>35 請輸入第二個整數 =>48 35+48=83 (B)製作技巧研討: 題目要求製作一個加法器(Add()),並將主程式(main())所輸入的兩個整數相加後,顯示其結果。

由此可見,主類別中包含兩個函數(或稱方法,method),如圖6-3所示。

Main方法利用sum=Add(value1,value2)敘述句呼叫Add方法,並且攜帶了兩個引數。

依照引數的相對應位置,將value1內容填入a變數內;也將value2內容複製到b變數內。

Add函數將執行結果sum,利用return敘述句,傳回給main方法,並存入main方法內的sum變數內。

另外,main與Add方法內都有sum變數,但兩者皆是獨立不相干的『區域變數』。

1 2 3 4 5 staticintADD(inta,intb){ intc; c=a+b; returnc; } 圖6-3呼叫加法器函數的運作情形 (C)程式範例: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //Ex6_1.java   importjava.util.*; /*Ex6_1 類別開始 */ publicclassEx6_1{     /*main 方法開始 */     publicstaticvoidmain(Stringargs[]){          Scannerkeyin=newScanner(System.in);          intsum;                           // 區域變數          intvalue1,value2;          System.out.printf("請輸入第一個整數 =>");          value1=keyin.nextInt();          System.out.printf("請輸入第二個整數 =>");          value2=keyin.nextInt();          /* 呼叫 Add() 函數 */           sum=Add(value1,value2);          System.out.printf("%d+%d=%d\n",value1, value2,sum);     }/*main 方法結束 */       /*Add 方法開始 */     staticintAdd(inta,intb){         intsum;                            // 區域變數         sum=a+b;         returnsum;     } /*Add 方法結束 */ } /*Ex6_1 類別結束 */ (D)程式重點說明: (1) 第5~29 行:『publicclassEx6_1{…}』。

宣告主類別的範圍。

(2) 第7~18 行:『publicstaticvoidmain(…){….}』。

宣告main方法的範圍。

(3) 第23~27 行:『staticintAdd(inta,intb){…}』。

宣告Add方法的範圍。

(4) 第9 行:『intsum;』。

宣告main方法的區域變數sum。

(5) 第 23 行:『int sum;』。

宣告Add方法的區域變數sum。

6-2-3範例研討:比較大小方法製作 (A)程式功能 請製作一套系統,它允許連續輸入五個數字,再輸出其中最大值與最小值的數值。

系統功能如下:(請參考Ex3_5範例) 請輸入第1 整數=>34 請輸入第2 整數=>56 請輸入第3 整數=>12 請輸入第4 整數=>98 請輸入第5 整數=>67 最大數值是98 最小數值是12 (B)製作技巧 吾人嘗試製作兩個比較大小方法,一者max(a,b)則傳會兩數較大者,另一者min(a,b)則傳回兩數中較小則,程式架構如下: 圖6-4Ex6_2程式架構 (C)程式範例 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 //Ex6_2.java import java.util.*; public class Ex6_2{  //Ex6_2 類別開始      public static void main(String args[]) {          Scanner keyin = new Scanner(System.in);           int max=0, min=999;           int value;           for(int i=0; i<5; i++){            System.out.printf("請輸入第 %d 整數 =>", i+1);            value = keyin.nextInt();            max =Max(max, value);           min =Min(min, value);          }          System.out.printf("最大數值是 %d\n", max);          System.out.printf("最小數值是 %d\n", min);       } /*main 方法結束 */        static int Max(int a, int b) {  //Max 方法開始          if (a > b)         return a;          else         return b;     }  //Max 方法結束        static int Min(int a, int b){  //Min 方法開始     if(a javaEx6_2 請 東方 擲骰子 (按 Enter鍵) =>         擲出 =>6  5  2 東方擲的是: 13 請 南方 擲骰子 (按 Enter鍵) =>         擲出 =>1  1  5 南方擲的是: 7 請 西方 擲骰子 (按 Enter鍵) =>         擲出 =>1  3  4 西方擲的是: 8 請 北方 擲骰子 (按 Enter鍵) =>         擲出 =>1  1  1 北方擲的是: 3 擲出最大的是 =13 (B)製作技巧研討: 每位牌友都需要擲3個骰子,我們可以將擲骰子動作製作成函數(game());另外,也需製作一只比較大小的函數(max()),如圖6-3所示。

主程式main呼叫game()函數時,不需攜帶任何引數,但執行完畢後,會傳回3個骰子的總和;呼叫max()函數時,需攜帶兩個函數,但會傳回其中較大者。

圖6-5Ex6_2程式架構 (C)程式範例: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 //Ex6_2.java   importjava.util.*; publicclassEx6_2{     publicstaticvoidmain(Stringargs[]){          intmaxNum,num1,num2,num3,num4;          Scannerkeyin=newScanner(System.in);          System.out.printf("請 東方 擲骰子 (按 Enter 鍵) =>");          keyin.nextLine();     //暫停的功能          num1=game();          System.out.printf("東方擲的是: %d\n",num1);            System.out.printf("請 南方 擲骰子 (按 Enter 鍵) =>");          keyin.nextLine();      //暫停的功能          num2=game();          System.out.printf("南方擲的是: %d\n",num2);            System.out.printf("請 西方 擲骰子 (按 Enter 鍵) =>");          keyin.nextLine();      //暫停的功能          num3=game();          System.out.printf("西方擲的是: %d\n",num3);            System.out.printf("請 北方 擲骰子 (按 Enter 鍵) =>");          keyin.nextLine();        //暫停的功能          num4=game();          System.out.printf("北方擲的是: %d\n",num4);            maxNum=max(num1,max(num2,max(num3,num4)));          System.out.printf("擲出最大的是 =%d\n",maxNum);     }     staticintgame(){          Randomrandom=newRandom();          intk,sum=0,ran;          System.out.printf("\t擲出 =>");          for(k=1;k<=3;k++){               ran=1+random.nextInt(6);               System.out.printf("%d  ",ran);               sum=sum+ran;          }          System.out.printf("\n");          returnsum;     }     staticintmax(inta,intb){          if(a>b)              returna;          else             returnb;     } } (D)程式重點說明 (1) 第8 行:『System.out.printf("請東方擲骰子(按Enter鍵)=>")』。

顯示要求玩家自行啟動亂數產生。

(2) 第9 行:『keyin.readLine();』。

系統執行到此命令時,會暫停等待使用者由鍵盤輸入數值,並按下『Enter』鍵,再讀入所輸入資料。

但此程式並沒有要求使用者輸入任何資料,讀入資料也沒有存入任何變數,其表示僅等待使用者敲入『Enter』鍵而已。

(3) 第4~50 行:『publicEx6_2{…}』。

宣告主類別的範圍。

(4) 第 5~31 行:『publicstaticvoidmain(..){…}』。

宣告主方法的範圍。

(5) 第32~43 行:『staticintgame(){…}』。

宣告game()方法的範圍。

(6) 第44~49 行:『staticintmax(inta,intb){…}』。

宣告max()方法範圍。

6-2-5自我挑戰:擲骰子搏奕遊戲 (A)系統功能:PM6_1.java 以前夜市常出現擲骰子的搏奕遊戲,方法是參與賭博者依序擲出三個骰子到碗公內,總數最大者贏了此局。

請編寫一程式來取代賭具(碗公與骰子),並假設只有四個人參與賭博。

程式功能是參與者輸入自己名字,系統立即顯示所擲骰子的總數,最後顯示最高者命名與數值。

期望操作介面如下: G:\Examples\chap6>javaPM6_1 請玩家輸入姓名並擲骰子=>丁一        您擲出=>3  1  3  合計:7 請玩家輸入姓名並擲骰子=>劉二        您擲出=>6  6  2  合計:14 請玩家輸入姓名並擲骰子=>張三        您擲出=>6  2  3  合計:11 請玩家輸入姓名並擲骰子=>李四        您擲出=>4  6  1  合計:11 恭喜!!劉二先生擲出14贏得此局 (B)製作技巧提示: 圖6-6 吾人可規劃兩個方法(main與game)於主類別內(PM6_1)。

game方法處理擲出3個骰字的動作,包含分別顯示每只骰子的數字,以及計算總和,並傳回給主方法main。

虛擬碼提示如下: 導入相關套件; 主類別宣告範圍 {    //主類別開始 主方法 main宣告範圍 {    //main方法開始 宣告擲出最大數值者姓名並設定初值(String maxName=“”); 宣告擲出最大數值並設定初值(int maxNum=0); For(inti=1;i<=4;i++){ 讀入玩家姓名( name); 呼叫擲骰子函數(number =game()); If(number>maxNum){ maxNum=number; maxName=name; } } 輸出最大者姓名與數字(maxName, maxNum); }   //main 方法結束 宣告 game方法範圍 { //game方法開始 宣告產生亂數物件; 產生並顯示 3個 1~6之間亂數; 計算總和並回傳; }//game 方法結束 }// 主類別結束 翻轉工作室:粘添壽   Java程式設計(一)含程式邏輯 第一章認識Java 與程式開發 第二章 Java 程式架構與輸入/輸出 第三章 算術運算式 第四章順序與分歧流程 第五章重複性流程 第六章 方法與套件引用 6-1類別與方法呼叫 6-2方法宣告與流程 6-3方法變數與類別變數 6-4遞回函數 6-5套件引用與方法產生 6-6專題研討 第七章陣列     翻轉電子書系列: 資訊與網路安全技術 Java程式設計(一)含程式邏輯 Java 程式設計(二)含物件導向 資料庫程式設計-PHP+MySQL 資料庫系統概論(含邏輯設計) 網路規劃與管理技術 電腦網路與連結技術 TCP/IP協定與Internet網路 電子商務安全概論 Linux伺服器管理-CentOS Unix/Linux系統管理實務         



請為這篇文章評分?