SlideShare a Scribd company logo
1 of 20
Download to read offline
Methods - 08                                                                   Computer Programming using Java              93
  CHAPTER                                                    เมท็อด
      08                                                    (Methods)
1. ความร้ ูเบืองต้ นเกี่ยวกับเมท็อด (Introduction to Methods)
              ้
1. นิยามของเมท็อด
   1) เมท็อด (Methods) คือ โปรแกรมย่อยที่ทําหน้ าที่เฉพาะ ซึงมีลกษณะเดียวกับ Subroutine, Sub-program
                                                            ่ ั
       และ Function โดยเมท็อดช่วยลดความซํ ้าซ้ อนของโปรแกรมที่ทํางานซํ ้าๆ ได้
   2) เมท็อดทุกเมท็อดจะปรากฏอยูในคลาส (Class) ซึงคลาสจะรวบรวมเมท็อดเอาไว้ เป็ นกลุมก้ อน
                                       ่              ่                                 ่
   3) รู ปแบบของโปรแกรมในช่วงก่อนหน้ านี ้เป็ นโปรแกรมแบบ 1 คลาส 1 เมท็อด แต่รูปแบบของโปรแกรม
       ในช่วงต่อจากนี ้เป็ นต้ นไปจะเป็ นโปรแกรมแบบ 1 คลาส หลายเมท็อด หรื อ หลายคลาสหลายเมท็อด
       (1) โปรแกรมแบบ 1 คลาส 1 เมท็อด จะรวมส่วนของโปรแกรมทุกส่วนไว้ ในเมท็อด main และมีการประ-
           มวลผลแบบตามลําดับจากบนลงล่าง
       (2) โปรแกรมแบบ 1 คลาส หลายเมท็อด จะแบ่งส่วนของโปรแกรมแต่ละส่วนออกเป็ นเมท็อดแต่ละเมท็อด
           โดยมีเมท็อด main เป็ นศูนย์กลาง และมีการประมวลผลแบบแยกส่วนย่อยกระโดดไปมาตามการเรี ยก
           ใช้ งานของเมท็อดต่างๆ (การประมวลผลขึ ้นกับคําสังในเมท็อด main ถ้ าไม่มี main จะไม่ประมวลผล)
                                                          ่
                 1 คลาส 1 เมท็อด (เมท็อด main)                    1                       1 คลาส หลายเมท็อด
                                                                                                                        7
               class Operation {
                                                            2
                                                                    เรี ยก       class Operation {

                        main(...) {                                                   main(...) {             ใช้ งาน
                1                                               ส่งค่า                      add()
                                                                                            sub()                   6
                    เริ่ มต้ น                                      3                       ...
                                 //add                                                }                       รับ
                                                             4
                                                                         รับ
             ทํางานแบบ                                                                add(...) {
                                                                 ทํางาน                                                 5
             ตามลําดับ           //sub                                                }
                                                                                                              คืนค่า
             จากบนลงล่าง                                ทํางานแบบ                     sub(...) {
                                                    2
                        }                               แยกส่วนย่อย                   }
                                         สิ ้นสุด       กระโดดไปมา
               } //End of class                                                  } //End of class


    4) ตัวอย่างของโปรแกรมแบบ 1 คลาส หลายเมท็อด
                                                        1       เรี ยก   add(4, 10)
                                                                  2 ส่งค่า 4 กับ 10
         1      public class Example {
         2        public static void main(String[] args) {
         3          int n = add(4, 10);                         3 รับ add(int x, int y)
         4          System.out.println(n);
         5        }                                             4 ทํางาน 4 + 10
         6        public static int add(int x, int y) {
         7          return x + y;                               5 คืนค่า return 14
         8        }
         9      }             7   ใช้ งาน System.out.println(n) 6 รับ int n = 14

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
94     Computer Programming using Java                                                               08 - Methods


     โจทย์ ข้อที่ 1 [ระดับง่ าย] จากตัวอย่ างโปรแกรมต่ อไปนี ้ จงพิจารณาคํากล่ าวแต่ ละข้ อว่ ากล่ าวผิด ( )
     หรื อถูก ( ) (20 คะแนน)
       1    import java.util.Scanner;
       2    public class Test {
       3      public static void main(String[] args) {
       4        Scanner kb = new Scanner(System.in);
       5
       6
                double a = kb.nextDouble();                   ตังใจจะใส่คา 5.0
                                                                ้        ่
                int b = kb.nextInt();
       7        double n = mul(a, b);
       8        int m = mod(13);                ตังใจจะใส่คา 2
                                                  ้         ่
       9        System.out.println(n + m);
       10     }
       11     private static double mul(double x, int y) {
       12       double n = x * y;
       13
       14     }
                return n;
                                                      บางเมท็อดอาจเขียนอยูในรูปแบบอื่นที่ไม่ใช่ public
                                                                            ่
       15     protected static int mod(int x) {       static ก็ได้ เช่น private static เป็ นต้ น ซึง ่
       16       return x % 3;
       17     }                                       จะได้ กล่าวรายละเอียดอีกครังในบทที่ 12
                                                                                 ้
       18   }


     1)          คลาส Test มีเมท็อดทังหมด 3 เมท็อด
                                             ้
     2)          ถ้ าตัดเมท็อด main ออกจะทําให้ แปลผล (Compile) ไม่ผาน และสังงาน (Run) ไม่ผาน
                                                                               ่       ่              ่
     3)          เมท็อด main สามารถเรียกใช้ เมท็อด mod ก่อนเรี ยกใช้ เมท็อด mul ได้
     4)          เมท็อด mod สามารถเรี ยกใช้ เมท็อด mul ได้
     5)          เมท็อด mod สามารถเรี ยกใช้ เมท็อด main ได้
     6)          เมท็อด mod สามารถเรี ยกใช้ เมท็อด mod ได้
     7)          ถ้ าต้ องการเรี ยกใช้ เมท็อด mul จะต้ องส่งค่า 2 ค่าที่เป็ นจํานวนจริงและจํานวนเต็มไปยังเมท็อด mul
     8)          ถ้ าต้ องการเรี ยกใช้ เมท็อด mod จะต้ องส่งค่า 1 ค่าที่เป็ นจํานวนจริงไปยังเมท็อด mod
     9)          ค่า n ในบรรทัดที่ 7 กับค่า n ในบรรทัดที่ 12 มีคาเท่ากันเพราะเป็ นตัวแปรตัวเดียวกัน
                                                                   ่
     10)         ค่า x ในบรรทัดที่ 15 กับค่า x ในบรรทัดที่ 16 มีคาเท่ากันเพราะเป็ นตัวแปรตัวเดียวกัน
                                                                       ่
     11)         ค่า x ในเมท็อด mod จะมีคาเท่ากับ 4 เมื่อเรี ยกใช้ งานคําสัง mod(4)
                                               ่                                 ่
     12)         ผลลัพธ์ท่ีได้ จากการประมวลผลในเมท็อด mul จะมีประเภทข้ อมูลเป็ น int
     13)         ผลลัพธ์ที่ได้ จากการประมวลผลในเมท็อด mod จะมีประเภทข้ อมูลเป็ น int
     14)         ผลลัพธ์ที่ได้ จากการประมวลผลบรรทัดที่ 7 และ 8 คือ 10.0 และ 1.0 ตามลําดับ
     15)         ผลลัพธ์ที่ได้ จากการประมวลผลคําสัง mul(2, 1) คือ 2.0
                                                          ่
     16)         ผลลัพธ์ที่ได้ จากการประมวลผลคําสัง mod(8, 3) คือ 2.0
                                                        ่
     17)         ผลลัพธ์ที่แสดงผลบนจอภาพที่ได้ จากการประมวลผลของคลาส Test คือ 11.0
     18)         คําสัง return ในบรรทัดที่ 13 และ 16 เป็ นคําสังที่ใช้ คนผลคําตอบที่ได้ จากการประมวลผลของเมท็อด
                          ่                                          ่       ื
     19)         คําสังภายในเมท็อด mul ตังแต่บรรทัดที่ 12-13 สามารถเขียนใหม่ได้ เป็ น return x * y;
                        ่                        ้
     20)         เมท็อด main ไม่มีคําสัง return เพราะว่าเมท็อด main เป็ นประเภท void
                                           ่
     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
Methods - 08                                                            Computer Programming using Java                   95
2. โครงสร้ างของเมท็อดและการเขียนเมท็อด (Method Structure and Creating Method)
1. โครงสร้ างโดยรวมของเมท็อด
   สามารถแบ่งออกเป็ น 2 ส่วนหลักได้ แก่ หัวเมท็อดและตัวเมท็อด ดังตัวอย่าง
                        คืนค่ าออกไป           รั บค่ าเข้ ามา
             ทางออก                                                 ทางเข้ า
     public static double add(int x, int y) {
                                                                                 หัวเมท็อด

         double cal = x + y;
                                                                 ตัวเมท็อด             ข้ อมูลจากทางเข้ าและข้ อมูลที่
         return cal;
     }                                  ประมวลผล                                       ทางออกไม่ได้ สมพันธ์กน
                                                                                                     ั       ั
                             คืนค่า

    จากตัวอย่างสามารถแจกแจงส่วนประกอบย่อยของเมท็อดออกเป็ น 6 ส่วนดังต่อไปนี ้
                1                2         3            4
     <ตัวบ่งคุณลักษณะ> <ประเภท> <ชื่อ> (<ตัวแปรรับเข้ า>) {                    ไม่วาภายในเมท็อดจะมีกี่คําสังก็ตามจะ
                                                                                    ่                          ่
                                                                               ต้ องใส่เครื่ องหมายปี กกาเปิ ด-ปิ ดเสมอ
         <คําสังประมวลผล> 5
               ่
         ...
                                                                        ส่วนประกอบที่ 1-4 คือ หัวเมท็อด (Head)
         <คําสังส่งกลับข้ อมูล> 6
               ่
                                                                        ส่วนประกอบที่ 5-6 คือ ตัวเมท็อด (Body)
     }   .

2. หัวเมท็อด (Head)
   เป็ นส่วนที่แสดงถึงรูปแบบ โครงสร้ างและข้ อกําหนดของเมท็อด ซึงมีสวนประกอบดังต่อไปนี ้
                                                                ่ ่
   1) ตัวบ่ งคุณลักษณะ (Modifier) คือ ส่วนที่กําหนดคุณลักษณะและคุณสมบัติบางประการของเมท็อด ซึ่ง
        ได้ แก่ public, private, protected, static ฯลฯ โดยจะอธิบายอีกครังในเรื่ องคลาสและอ๊ อบเจ็ค แต่
                                                                           ้
        ในบทนี ้ให้ เขียนตัวบ่งคุณลักษณะของทุกเมท็อดเป็ นแบบ public static เท่านัน ดังตัวอย่าง
                                                                                    ้
             public static double power(double n)                                 ส่วนนี ้มีก็ได้ ไม่มีก็ได้ ตัดออกได้

    2) ประเภทเมท็อด (Method Type) หรื อประเภทข้ อมลที่ส่งกลับ (Return Type) คือ ประเภทข้ อมูลที่
                                                              ู
       เป็ นผลลัพธ์สดท้ ายของเมท็อดที่จะคืนค่ากลับ ซึงได้ แก่ประเภทข้ อมูล byte, short, int, long, float,
                    ุ                                ่
       double ฯลฯ หากเมท็อดไม่มีการคืนค่ากลับให้ ระบุเป็ นประเภท void ดังตัวอย่าง

             protected void show(float y, String s)                               ส่วนนี ้ต้ องมีเสมอ ตัดออกไม่ได้

         ในกรณีที่ประเภทข้ อมูลที่ส่งกลับมีโครงสร้ างข้ อมูลเป็ นแบบอาเรย์ ให้ ระบุเครื่ องหมายวงเล็บเหลี่ยม
         (Brackets) ต่อท้ายประเภทเมท็อดนันด้ วย ดังตัวอย่าง ถ้ าเป็ นอาเรย์สองมิตให้ ระบุเป็ น int[][]
                                            ้                                    ิ
             private static int[] sort(int x[])
                                                                    ในกรณีที่คืนค่ามากกว่า 1 ค่าจะต้ องอยูในรูปอาเรย์
                                                                                                         ่

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
96     Computer Programming using Java                                                                         08 - Methods


         3) ชื่อเมท็อด (Method Name) คือ ชื่อที่อ้างถึงหรื อชื่อเรี ยกเมท็อด ซึ่งควรขึ ้นต้ นด้ วยอักษรตัวพิมพ์เล็ก
            (เป็ นไปตามกฎการตังชื่อตัวแปร) และชื่อควรเป็ นคํากริ ยาหรื อคําที่แสดงการกระทํา เช่น getID(…),
                              ้
            addNumber(…) เป็ นต้ น และหลังชื่อเมท็อดต้ องตามด้ วยเครื่ องหมายวงเล็บเปิ ด-ปิ ดเสมอ ดังตัวอย่าง

              public static double add (int x, int y)                              ส่วนนี ้ต้ องมีเสมอ ตัดออกไม่ได้

         4) ตัวแปรรับเข้ า (Parameters) คือ ค่าหรื อตัวแปรที่รับเข้ ามายังเมท็อดเพื่อใช้ ประมวลผลภายในเมท็อด ซึง    ่
            ตัวแปรรับเข้ าของเมท็อดหนึ่งๆ จะมีหรื อไม่มีก็ได้ ถ้ ามีจะมีกี่ตวก็ได้ ถ้ ามีหลายตัวแต่ละตัวต้ องคันด้ วย
                                                                            ั                                  ่
            เครื่ องหมายจุลภาค (Comma) และทุกตัวต้ องมีประเภทข้ อมูลกํากับเสมอ เช่น set(int a, int b)
            ห้ ามเขียนเป็ น set(int a, b) โดยเด็ดขาด ดังตัวอย่าง              คล้ ายกับการประกาศตัวแปร
              public double mul(int x, double y, int z)                            ส่วนนี ้มีก็ได้ ไม่มีก็ได้ ตัดออกได้

             ในกรณีที่พารามิเตอร์ มีโครงสร้ างข้ อมูลเป็ นแบบอาเรย์ ให้ ระบุเครื่ องหมายวงเล็บเหลี่ยมไว้ ข้างหน้าหรื อ
             ต่อท้ายชื่อพารามิเตอร์ นนด้ วย ดังตัวอย่าง
                                     ั้
              public static int find(int x, int y[][])                             มีพารามิเตอร์ ที่เป็ นอาเรย์สองมิติ

     โจทย์ ข้อที่ 2 [ระดับง่ าย] จงเติมเต็มส่ วนหัวเมท็อดให้ สมบรณ์ ตามรปแบบของเมท็อดต่ อไปนี ้ (10 คะแนน)
                                                                ู       ู
     1) เมท็อดชื่อ square มีข้อมลรั บเข้ า 1 ค่ าที่เป็ นจํานวนจริ ง เพื่อใช้ คํานวณหาค่ ายกกําลังสองของ
                                        ู
        จํานวนนัน พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน)
                    ้          ้
                                         double square(                                )


     2) เมท็อดชื่อ root มีข้อมูลรั บเข้ า 1 ค่ าที่เป็ นจํานวนเต็ม เพื่อใช้ คานวณหาค่ ารากที่สองของจํานวนนัน
                                                                             ํ                             ้
        พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน)
                ้
         protected static                                              (                            )


     3) เมท็อดชื่อ showName มีข้อมลรั บเข้ า 1 ค่ าที่เป็ นชื่อของบุคคลใดๆ เพื่อใช้ แสดงชื่อของบุคคลนันขึน
                                   ู                                                                  ้ ้
        บนจอภาพ โดยไม่ ต้องส่ งค่ าคําตอบกลับ (2 คะแนน)
         private static                            showName(                                   )


     4) เมท็อดชื่อ countX มีข้อมลรั บเข้ าที่เป็ นอาเรย์ 1 มิตประเภทจํานวนเต็มและตัวเลขจํานวนเต็ม เพื่อ
                                ู                             ิ
        ใช้ นับจํานวนสมาชิกในอาเรย์ ท่ มีค่าเท่ ากับจํานวนเต็มที่รับมา พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน)
                                       ี                                       ้
         static


     5) เมท็อดชื่อ revArray มีข้อมลรั บเข้ า 1 ค่ าที่เป็ นอาเรย์ 1 มิติประเภทจํานวนจริง เพื่อใช้ กลับค่ า
                                     ู
        (Reverse) สมาชิกในอาเรย์ นัน พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน)
                                   ้         ้
                                                                  revArray

     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
Methods - 08                                                           Computer Programming using Java            97
3. ตัวเมท็อด (Body)
   เป็ นส่วนที่แสดงรายละเอียดของการประมวลผลและการส่งกลับข้ อมูลของเมท็อด ซึงมีดงต่อไปนี ้
                                                                                     ่ ั
   1) การประมวลผล ซึงได้ แก่การประกาศตัวแปรเพื่อใช้ ภายในเมท็อด และการใช้ คําสังต่างๆ เช่น if-else,
                                ่                                                        ่
        while, for, Scanner ในการประมวลผลภายในเมท็อด ซึงหลักการเหล่านี ้จะเหมือนกับเนื ้อหาก่อนหน้ า
                                                                    ่
        นี ้ตังแต่บทที่ 1-7 ที่ได้ เรี ยนมาแล้ วทุกประการ
               ้
   2) การส่ งกลับข้ อมล เป็ นการส่งค่าหรื อคืนค่าคําตอบที่ได้ จากการประมวลผลในเมท็อดกลับไปยังเมท็อดที่
                              ู
        เรี ยกใช้ ซึงค่าที่สงกลับ (Return Value) จะต้ องตรงกับประเภทเมท็อด (Method Type) หรื อ ประเภทข้ อมูล
                    ่       ่
        ที่สงกลับ (Return Type) ที่ประกาศไว้ ที่หวเมท็อดเสมอ หรื อถ้ าไม่ตรงกันจะต้ องสามารถสอดใส่กนได้ ซึง
             ่                                         ั                                             ั     ่
        การส่งกลับจะใช้ คําสัง return และสามารถทําได้ เพียงครังเดียวเท่านัน ถ้ ามีคําสัง return หลายกรณีจะ
                                  ่                               ้           ้        ่
        ทําเพียงกรณีแรกที่เป็ นจริ ง แต่ถ้าประเภทเมท็อดเป็ น void ไม่ต้องมีคําสัง return ดังตัวอย่าง
                                                                                ่
          1       public static double div(int a, int b){                           เมท็อดเป็ นประเภท double
          2         double x = (double) a / (double) b;
          3         return x;
          4       }
                                         ค่าที่จะส่งกลับ (ค่าของตัวแปร x) จะต้ องมีประเภทข้ อมูลเป็ น double

     3) การส่ งกลับข้ อมลแบบหลายค่ า ถ้ าเมท็อดประมวลผลแล้ วได้ ผลลัพธ์ที่เป็ นคําตอบสุดท้ ายมากกว่า 1 ค่า
                         ู
        จะต้ องส่งค่ากลับโดยใช้ อาเรย์ (หนึ่งมิติ) โดยการเก็บค่าคําตอบทุกค่าไว้ ในอาเรย์แล้ วคืนค่าของอาเรย์นน
                                                                                                             ั้
        เพียงค่าเดียวกลับไปยังเมท็อดที่เรี ยกใช้ ซึงจะทําให้ ได้ ผลคําตอบทุกค่าคืนกลับมาด้ วย ดังตัวอย่าง
                                                   ่
          1       public static int[] findFirstLast(int a[]) {
          2         int x[] = new int[2];
          3         x[0] = a[0];              ประเภทข้ อมูลที่สงกลับที่หวเมท็อดต้ องเป็ นอาเรย์
                                                               ่        ั
          4         x[1] = a[a.length – 1];
          5         return x;                  การส่งกลับข้ อมูลแบบอาเรย์จะเขียนเฉพาะชื่อของอาเรย์
          6       }
                                                            โดยไม่ต้องใส่เครื่ องหมายวงเล็บเหลี่ยม

โจทย์ ข้อที่ 3 [ระดับง่ าย] จงพิจารณาเมท็อดต่ อไปนีเ้ ขียนผิด ( ) หรื อถูก ( ) ตามหลักไวยากรณ์ ของ
ภาษาจาวาพร้ อมทังบอกเหตุผลกํากับ (10 คะแนน)
                    ้
1)           public static printError(String msg) {
                  System.err.println(msg);
              }
2)            protected static int flip(int n) {
                if (n == 1) n = 0;
              }
3)            public static float max(long x, y) {
                if (x > y) return x;
                else return y;
              }
4)            private static void showChar() {
                for(char i = '0'; i <= '9'; i++) {
                  System.out.println(i);
                }
                return;
              }

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
98        Computer Programming using Java                                                           08 - Methods


     5)          static String calGrade(int x) {
                   if (x > 80) return "A";
                   else if (x < 50) return "F";
                   else System.out.println("C");
                 }
     6)          double getLen(double dx, double dy) {
                   double dx = Math.abs(dx);
                   return Math.sqrt(dx*dx + dy*dy);
                 }
     7)          public private boolean checkLen(int x[], int y[]) {
                   return x.length == y.length;
                 }
     8)          public float getLocationPoint() {
                   return 0.0;
                 }
     9)          public static int fac(int x) {
                   if(x <= 1) return 1;
                   else return fac(x – 1) * x;
                 }
     10)         int[] getThreeMember(int[] x) {
                   int n[] = { x[0], x[1], x[2] };
                   return n[];
                 }


     โจทย์ ข้อที่ 4 [ระดับง่ าย] จงเขียนเมท็อดอย่ างง่ ายตามรปแบบการทํางานที่ระบุไว้ ต่อไปนี ้ (16 คะแนน)
                                                             ู
     1) เมท็อดชื่อ addRealNumber มีข้อมลรั บเข้ าเป็ นตัวเลขจํานวนจริ ง 3 จํานวน ซึ่งใช้ ในการหาผลบวก
                                              ู
        ของตัวเลข 3 จํานวนนันแล้ วมีการคืนค่ ากลับ (4 คะแนน)
                                  ้




     2) เมท็อดชื่อ printX มีข้อมลรั บเข้ าเป็ นตัวเลขจํานวนเต็ม 1 จํานวน เพื่อใช้ ในการแสดงผลลัพธ์ ออก
                                ู
        ทางจอภาพภายในเมท็อดนันโดยไม่ คนค่ ากลับ (4 คะแนน)
                                  ้           ื




     3) เมท็อดชื่อ divideByInt ใช้ ในการหาผลหารระหว่ างตัวเลข 2 จํานวน ซึ่งเป็ นจํานวนจริงและจํานวน
        เต็มอย่ างละ 1 จํานวน แล้ วมีการคืนค่ ากลับ (4 คะแนน)




     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
Methods - 08                                                       Computer Programming using Java              99
4) เมท็อดชื่อ fullName ใช้ ในการรวมชื่อและนามสกุลที่รับเข้ ามาให้ เป็ นชื่อเต็ม (ระหว่ างชื่อและ
   นามสกุลต้ องมีการเว้ นวรรคด้ วย) แล้ วคืนค่ ากลับ (4 คะแนน)




โจทย์ ข้อที่ 5 [ระดับง่ าย] จงเขียนเมท็อด fac(…) ที่สมบรณ์ เพื่อใช้ ในการคํานวณหาค่ าแฟกทอเรี ยล
                                                          ู
(Factorial) ของตัวเลขจํานวนเต็มที่ระบุ เช่ น fac(3) = 6, fac(5) = 120 เป็ นต้ น (10 คะแนน)




โจทย์ ข้อที่ 6 [ระดับง่ าย] เมท็อดชื่อ findMax มีข้อมลรั บเข้ าที่เป็ นชุดของตัวเลขจํานวนจริง 50 จํานวน
                                                     ู
เพื่อนํามาหาค่ าตัวเลขที่มากที่สุดใน 50 จํานวนนัน แล้ วมีการคืนค่ ากลับ (10 คะแนน)
                                                 ้




โจทย์ ข้อที่ 7 [ระดับปานกลาง] จงเขียนเมท็อด underX(…) ที่สมบรณ์ เพื่อใช้ คํานวณและนับว่ ามีสมาชิก
                                                                    ู
ในอาเรย์ หนึ่งมิตช่ ือ a กี่จานวนที่มีค่าน้ อยกว่ าจํานวนเต็ม x โดยให้ รับอาเรย์ a และตัวแปร x ผ่ านทาง
                  ิ          ํ
พารามิเตอร์ (10 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
100   Computer Programming using Java                                                            08 - Methods




  โจทย์ ข้อที่ 8 [ระดับปานกลาง] จงเขียนเมท็อด isPrime(…)ที่สมบรณ์ เพื่อใช้ ตรวจสอบตัวเลขจํานวน
                                                                     ู
  เต็มที่รับเข้ ามาทางพารามิเตอร์ ว่าเป็ นจํานวนเฉพาะหรือไม่ (10 คะแนน)




  โจทย์ ข้อที่ 9 [ระดับปานกลาง] จงเขียนเมท็อด memberOfArray(…) ที่สมบรณ์ เพื่อค้ นหาลําดับของสมา-
                                                                                 ู
  ชิกตัวแรกในอาเรย์ หนึ่งมิตช่ ือ a ที่มีค่าเท่ ากับจํานวนเต็ม x ถ้ าค้ นเจอมากกว่ า 1 จํานวนให้ คืนค่ าเพียง
                            ิ
  สมาชิกตัวแรกที่ ค้นเจอโดยเริ่มจากตัวซ้ ายสุด แต่ ถ้าค้ นไม่ เจอให้ คืนค่ า -1 (10 คะแนน)




  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้
Methods - 08                                                             Computer Programming using Java             101
โจทย์ ข้อที่ 10 [ระดับยาก] จงเขียนเมท็อด appendArray(…) เพื่อรั บพารามิเตอร์ สองค่ าที่เป็ นอาเรย์
ชนิ ด จํ า นวนเต็ ม ทั ง ค่ ู แ ล้ วคื น ค่ า เป็ นอาเรย์ ชนิ ด จํ า นวนเต็ ม ที่ เ กิ ด จากการเอาข้ อ มลในอาเรย์ ข อง
                       ้                                                                                ู
พารามิเตอร์ ตวที่สองไปต่ อท้ ายตัวที่หนึ่ง เช่ น a[] = {1, 2, 3 } และ b[] = {5, 6} จะได้ ผลลัพธ์
               ั
ดังนี ้ appendArray(a, b) = {1, 2, 3, 5, 6} เป็ นต้ น (10 คะแนน)




3. การเรี ยกใช้ เมท็อดอย่ างง่ าย (Simple Method Calling)
1. บทบาทของเมท็อด ในการเรี ยกใช้ เมท็อดจะประกอบไปด้ วยเมท็อด 2 ฝ่ ายได้ แก่
   1) เมท็อดผู้เรี ยก ทําหน้ าที่เป็ นผู้ไปเรี ยกใช้ เมท็อดอื่น
   2) เมท็อดผู้ถกเรี ยก ทําหน้ าที่เป็ นผู้ที่ให้ เมท็อดอื่นมาเรี ยกใช้ ตวมัน
                 ู                                                       ั
      1     public static void main(String[] args) {
      2       int n = add(5, 3);                                          เมท็อด main เป็ นผู้เรี ยก
      3     }
      4     public static int add(int x, int y) {                         (เรี ยกใช้ เมท็อด add)
      5       return x + y;
      6     }                      เมท็อด add เป็ นผู้ถกเรี ยก (ถูกเรี ยกใช้ โดยเมท็อด main)
                                                       ู

2. ขันตอนการเรี ยกใช้ เมท็อดอย่ างง่ าย
     ้
   1) ระบุชื่อเมท็อดที่ต้องการจะเรี ยก เช่น add(…) (ต้ องมีเครื่ องหมายวงเล็บเปิ ด-ปิ ดเสมอ)
   2) ระบุคาพารามิเตอร์ ทกตัวของเมท็อดให้ ถกต้ องตามประเภทข้ อมูล เช่น add(5, 3) (ค่าของพารามิเตอร์
              ่              ุ                   ู
       สามารถระบุเป็ นชื่อตัวแปรหรื อนิพจน์ก็ได้ เช่น add(x, y * 2))
   3) สร้ างตัวแปรเพื่อมารับคําตอบที่ได้ จากการประมวลผลของเมท็อด เช่น int n = add(5, 3);
       (1) ถ้ าเมท็อดที่ต้องการจะเรี ยกคืนค่าข้ อมูลประเภท byte, short, int, long, float, double ฯลฯ ให้
           สร้ างตัวแปรเพื่อรับคําตอบตามประเภทข้ อมูลนันๆ เช่น String s = getName(53300121);
                                                           ้
       (2) ถ้ าเมท็อดที่ต้องการจะเรี ยกไม่คืนค่าหรื อมีประเภทข้ อมูลเป็ น void ไม่ต้องสร้ างตัวแปรเพื่อรับคําตอบ
           (สามารถเรี ยกใช้ เมท็อดโดยไม่ต้องมีตวแปรมารับ) เช่น showName(53300121);
                                                   ั
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
102   Computer Programming using Java                                                                    08 - Methods


            1      public static void main(String[] args) {
                     String s = getName(53300121);
                                                                 เมท็อด main เรี ยกใช้ เมท็อด
            2
            3        System.out.println(s);                      getName โดยส่งพารามิเตอร์
            4        showName(53300121);
            5      }
                                                                 ประเภท int ไปประมวลผลและสร้ าง
            6      public static String getName(int id) {        ตัวแปร s เพื่อรับคําตอบที่คืนกลับมา
            7        return "Wongyos";
            8      }
            9      public static void showName(int id) {    เมท็อด main เรี ยกใช้ เมท็อด showName
            10       System.out.println("Wongyos");
            11     }                                        แบบโดดๆ โดยส่งพารามิเตอร์ ประเภท int
                                                                               ไปประมวลผล ซึงไม่มีการคืนค่ากลับ
                                                                                            ่
           4) การส่งค่าและรับค่าอาเรย์
              (1) การส่งค่าอาเรย์ไปยังเมท็อดใดๆ ให้ ระบุเพียงชื่ออาเรย์เท่านัน โดยไม่ต้องใส่วงเล็บเหลี่ยม เช่น
                                                                             ้
                    int n[] = { 1, 2, 3, 4 };
                    int c = underX(n, 3);
                (2) การรับค่าที่คืนกลับมาจากเมท็อดใดๆ ในรูปของอาเรย์ ให้ ประกาศอาเรย์มารับ (ไม่ต้องใช้ คําสัง new) เช่น
                                                                                                            ่
                    int x[] = { 1, 2, 3, 4 }, y[] = { 5, 7, 9 };
                    int z[] = appendArray(x, y);

  3. ข้ อสังเกตในการเรี ยกใช้ เมท็อด
     1) การเรี ยกใช้ เมท็อด (ที่สร้ างเสร็ จสมบูรณ์แล้ ว) จะระบุเพียงค่าพารามิเตอร์ ของเมท็อดที่ต้องการจะเรี ยกใช้
          เท่านัน โดยไม่ต้องระบุประเภทข้ อมูลของพารามิเตอร์ (byte, short ฯลฯ) เช่น int n = add(x, y);
                 ้
     2) การประกาศและสร้ างเมท็อด (ที่ยงไม่เคยสร้ างแต่กําลังจะสร้ าง) จะต้ องระบุทงชื่อพารามิเตอร์ และประเภท
                                             ั                                        ั้
          ข้ อมูลของพารามิเตอร์ ทกๆ ตัว ของเมท็อดที่จะสร้ างขึ ้นใหม่ เช่น public ... add(int x, int y)
                                 ุ
            1      public static void main(String[] args) {
            2        int x = 5, y = 3;
            3        int n = add(x, y);     การเรี ยกใช้ เมท็อด ใส่คาพารามิเตอร์ โดยไม่ต้องระบุประเภทข้ อมูล
                                                                    ่
            4      }
            5      public static int add(int x, int y) {              การประกาศและสร้ างเมท็อด ใส่ชื่อพา-
            6        return x + y;
            7      }                                                  รามิเตอร์ และระบุประเภทข้ อมูล
                                   ตัวแปร x และ y ในเมท็อด main จะเป็ นคนละตัว กับตัวแปร x และ y ในเมท็อด add

  โจทย์ ข้อที่ 11 [ระดับง่ าย] จงเขียนคําสั่งการเรี ยกใช้ งานเมท็อด จากหัวเมท็อดที่กาหนดให้ ต่อไปนี ้ โดย
                                                                                       ํ
  สามารถกําหนดค่ าของพารามิเตอร์ ของเมท็อดที่เรียกใช้ ได้ อย่ างอิสระ (10 คะแนน)
   ข้ อ                        หัวเมท็อด                            เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด
      1.        public static void set(int m, int n)



      2.        public static int cals(int m, float n)



      3.        public static String toString(int[] n)



  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้
Methods - 08                                                       Computer Programming using Java            103
 ข้ อ                         หัวเมท็อด                             เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด
  4.     public static int[] get(int m, String s)



  5.     public static void sort(double d[])



  6.     public static boolean check(long id)



  7.     public static int flip(int m, boolean b)



  8.     public static double[] inputArray()



  9.     public static void showLogo()



 10.     public static byte f(int m, int n, int p)



โจทย์ ข้อที่ 12 [ระดับง่ าย – ระดับยาก] จงเขียนเมท็อดต่ างๆ ในคลาส ArrayUtility ให้ สมบรณ์ เพื่อใช้
                                                                                       ู
ประมวลผลกั บ อาเรย์ โดยมี ร ายละเอีย ดของเมท็อดดัง ต่ อไปนี ้ และกํา หนดให้ เ มท็อดแต่ ล ะเมท็อ ด
สามารถเรียกใช้ งานซึ่งกันและกันได้ อย่ างอิสระ (75 คะแนน)
import java.util.Scanner;
public class ArrayUtility {
       //[ระดับง่ าย] เมท็อด main(…) เพื่อเรียกใช้ งานเมท็อดอื่นๆ ให้ ครบถ้ วนพร้ อมทังแสดงผลลัพธ์ ขึนบน
                                                                                      ้              ้
       จอภาพให้ สวยงาม โดยสามารถกําหนดค่ าพารามิเตอร์ ของแต่ ละเมท็อดได้ อย่ างอิสระ (5 คะแนน)
       public static void main(String[] args) {
         int a[] = { 5, 1, 6, 1, 4, 1, 2, 1, 4, 3, 1, 5, 7, 2, 1, 1 };
         sort(a);
         System.out.println(max(a));      ตัวอย่ างการเรียกใช้ เมท็อดพร้ อมทังการแสดงผล
                                                                             ้
         System.out.println(min(a));
           ข้ อ                    เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด                       เมท็อดที่เรียก
            1.                                                                               count(…)

            2.                                                                               mode(…)

            3.                                                                               majority(…)

            4.                                                                               median(…)

            5.                                                                               range(…)

       } //End of main

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
104   Computer Programming using Java                                                            08 - Methods


       //[ระดับปานกลาง] เมท็อด swap(…) ใช้ ในการสลับค่ าสมาชิกในอาเรย์ ตามตําแหน่ ง i และ j ที่ระบุ
       เช่ นคําสั่ง swap(a, i, j) คือการสลับค่ าสมาชิกตําแหน่ งที่ i และ j ของอาเรย์ a เป็ นต้ น โดยไม่
       ต้ องคืนค่ ากลับ (5 คะแนน)




       //[ระดับปานกลาง] เมท็อด sort(…) ใช้ จัดเรี ยงข้ อมลในอาเรย์ จากน้ อยไปหามากโดยใช้ การจัดเรี ยง
                                                         ู
       แบบฟอง (Bubble Sort) โดยไม่ ต้องคืนค่ ากลับ (10 คะแนน)




       //[ระดับปานกลาง] เมท็อด count(…) ใช้ นับจํานวนสมาชิกในอาเรย์ ท่ ีมีค่าเท่ ากับจํานวนเต็ม k ที่ระ-
       บุ (นับความถี่) แล้ วคืนค่ าจํานวนที่นับได้ (10 คะแนน)




  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้
Methods - 08                                                       Computer Programming using Java          105
    //[ระดับยาก] เมท็อด mode(…) ใช้ หาค่ าฐานนิยม โดยจะคืนค่ าสมาชิกในอาเรย์ ท่ ีมีค่าความถี่สูงสุด
    หรือปรากฎจํานวนครั งมากที่สุด ถ้ ามีหลายค่ าให้ คนค่ าใดก็ได้ เพียงค่ าเดียว (10 คะแนน)
                        ้                            ื




    //[ระดับยาก] เมท็อด majority(…) ใช้ หาค่ าหม่ ูมาก โดยจะคืนค่ าสมาชิกในอาเรย์ ท่ ีมีค่าความถี่มาก
    กว่ าครึ่งหนึ่งของจํานวนสมาชิกทังหมด ถ้ าหาไม่ ได้ ให้ คืนค่ า -1 (10 คะแนน)
                                    ้




   //[ระดับปานกลาง] เมท็อด median(…) ใช้ หาค่ ามัธยฐาน พร้ อมทังคืนค่ ากลับ (10 คะแนน)
                                                               ้




© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
106   Computer Programming using Java                                                            08 - Methods


       //[ระดับง่ าย] เมท็อด max(…) ใช้ หาค่ าสงสุดของสมาชิกในอาเรย์ พร้ อมทังคืนค่ ากลับ (5 คะแนน)
                                               ู                             ้




       //[ระดับง่ าย] เมท็อด min(…) ใช้ หาค่ าตํ่าสุดของสมาชิกในอาเรย์ พร้ อมทังคืนค่ ากลับ (5 คะแนน)
                                                                               ้




       //[ระดับง่ าย] เมท็อด range(…) ใช้ หาค่ าพิสัยของอาเรย์ พร้ อมทังคืนค่ ากลับ (5 คะแนน)
                                                                       ้




  } //End of class


  โจทย์ ข้อที่ 13 [ระดับยาก] โปรแกรมต่ อไปนีเ้ ป็ นโปรแกรมที่เขียนคําสั่งทุกคําสั่งไว้ ในเมท็อด main(…)
  เพียงเมท็อดเดียว โดยโปรแกรมนีใช้ สําหรั บสร้ างอาเรย์ 1 มิตประเภทจํานวนเต็ม 2 ตัว พร้ อมทังรั บค่ า
                                      ้                             ิ                             ้
  สมาชิกผ่ านทางแปนพิมพ์ เก็บไว้ ในอาเรย์ แต่ ละช่ องจนครบสมบรณ์ หลังจากนันทําการตรวจสอบการ
                     ้                                                 ู           ้
  เท่ ากันของอาเรย์ ทังสองว่ าเท่ ากันหรื อไม่ พร้ อมทังแสดงผลลัพธ์ ขึนบนจอภาพ จากนันทําการจัดเรี ยง
                       ้                               ้                 ้                ้
  ข้ อมลจากน้ อยไปหามากของอาเรย์ ทังสองแล้ วตรวจสอบการเท่ ากันของอาเรย์ อีกครั งหนึ่ งว่ าเท่ ากัน
        ู                                   ้                                               ้
  หรื อไม่ พร้ อมทังแสดงผลลัพธ์ ขึนบนจอภาพ สุดท้ ายทําการแสดงสมาชิกแต่ ละตัวของอาเรย์ ทังสองขึน
                   ้               ้                                                            ้     ้
  บนจอภาพอย่ างสวยงามดังตัวอย่ างข้ างล่ าง จากโปรแกรมที่กําหนดให้ จงเขียนโปรแกรมใหม่ โดยแบ่ ง
  ส่ วนของโปรแกรมต่ างๆ ออกเป็ นเมท็อดย่ อยให้ เหมาะสม (ประมาณ 5-6 เมท็อด) เพื่อให้ การทํางานของ
  โปรแกรมเป็ นสัดส่ วนยิ่งขึน แต่ ให้ คงไว้ ซ่ งการแสดงผลลัพธ์ ท่ เหมือนเดิมทุกประการ (40 คะแนน)
                            ้                  ึ                  ี
  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้
Methods - 08                                                          Computer Programming using Java             107
  Enter a[] size: 3
  Enter member: 1         ระบุจํานวนสมาชิกของอาเรย์พร้ อมทังรับค่าสมาชิกแต่ละตัวของอาเรย์
                                                           ้
  Enter member: 2
  Enter member: 3
  Enter b[] size: 3
  Enter member: 2         ระบุจํานวนสมาชิกของอาเรย์พร้ อมทังรับค่าสมาชิกแต่ละตัวของอาเรย์
                                                             ้
  Enter member: 1
  Enter member: 3
  Check array equals before sort: not equals                     ผลเปรี ยบเทียบการเท่ากันของอาเรย์ก่อนจัดเรี ยง
  Check array equals after sort: equals
  a[]: 1 2 3                                                   ผลเปรี ยบเทียบการเท่ากันของอาเรย์หลังจัดเรี ยง
  b[]: 1 2 3      แสดงสมาชิกแต่ละตัวของอาเรย์

 1     import java.io.*;
 2     import java.util.Scanner;
 3     import jlab.graphics.DWindow;
 4     public class OneMainOneMethod {
 5       public static void main(String[] args) {
 6         Scanner kb = new Scanner(System.in);
 7
 8           System.out.print("Enter a[] size: ");
 9           int x = kb.nextInt();
 10          int a[] = new int[x];
 11          for (int i = 0; i < a.length; i++) {
 12            System.out.print("Enter member: ");
 13            a[i] = kb.nextInt();
 14          }
 15
 16          System.out.print("Enter b[] size: ");
 17          int y = kb.nextInt();
 18          int b[] = new int[y];
 19          for (int i = 0; i < b.length; i++) {
 20            System.out.print("Enter member: ");
 21            b[i] = kb.nextInt();
 22          }
 23
 24          System.out.print("Check array equals before sort: ");
 25          if (a.length == b.length) {
 26            int count = 0;
 27            for (int i = 0; i < a.length; i++) {
 28              if (a[i] == b[i]) count++;
 29            }
 30            if (count == a.length) {
 31              System.out.println("equals");
 32            } else {
 33              System.out.println("not equals");
 34            }
 35          } else {
 36            System.out.println("not equals");
 37          }
 38
 39          for (int i = a.length - 1; i >= 1; i--) {
 40            for (int j = 0; j < i; j++) {
 41              if (a[j] > a[j + 1]) {
 42                int t = a[j];
 43                a[j] = a[j + 1];
 44                a[j + 1] = t;
 45              }
 46            }
 47          }


© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
108   Computer Programming using Java                                                            08 - Methods


      48       for (int i = b.length - 1; i >= 1; i--) {
      49         for (int j = 0; j < i; j++) {
      50           if (b[j] > b[j + 1]) {
      51             int t = b[j];
      52             b[j] = b[j + 1];
      53             b[j + 1] = t;
      54           }
      55         }
      56       }
      57
      58       System.out.print("Check array equals after sort: ");
      59       if (a.length == b.length) {
      60         int count = 0;
      61         for (int i = 0; i < a.length; i++) {
      62           if (a[i] == b[i]) count++;
      63         }
      64         if (count == a.length) {
      65           System.out.println("equals");
      66         } else {
      67           System.out.println("not equals");
      68         }
      69       } else {
      70         System.out.println("not equals");
      71       }
      72
      73       System.out.print("a[]: ");
      74       for (int i = 0; i < a.length; i++) {
      75         System.out.print(a[i] + " ");
      76       }
      77       System.out.println();
      78
      79       System.out.print("b[]: ");
      80       for (int i = 0; i < b.length; i++) {
      81         System.out.print(b[i] + " ");
      82       }
      83       System.out.println();
      84     } //End of main
      85   } //End of class


  เขียนโปรแกรมใหม่ โดยแบ่ งออกเป็ นเมท็อดย่ อย (ประมาณ 5-6 เมท็อด รวมเท็อด main(…) แล้ ว) โดย
  วิธีการแบ่ งเมท็อดย่ อยให้ พจารณาจากสัดส่ วนการทํางานย่ อยของโปรแกรมเดิม
                              ิ
  import java.util.Scanner;
  public class OneMainManyMethods {                    คะแนนจะแปรผันไปตามโปรแกรมและเมท็อดที่ออกแบบ




  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้
Methods - 08                                                       Computer Programming using Java          109




} //End of class

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
110   Computer Programming using Java                                                                08 - Methods


  4. เมท็อดหลายแบบในชื่อเดียวกัน (Overloading Methods)
  1. นิยามของเมท็อดหลายแบบในชื่อเดียวกัน (Overloading Methods)
     คือ เมท็อดตังแต่ 2 เมท็อดใดๆ ขึ ้นไปที่มีชื่อเหมือนกันแต่มีรายการของพารามิเตอร์ ตางกัน ดังรายละเอียดต่อไปนี ้
                 ้                                                                    ่
     1) จํานวนพารามิเตอร์ ตางกัน เช่น
                             ่
            public static int test(int x)                             เมท็อด test ตัวที่หนึงมีพารามิเตอร์ 1 ตัว
                                                                                           ่
            public static int test(int x, int y)                      เมท็อด test ตัวที่สองมีพารามิเตอร์ 2 ตัว

       2) ประเภทข้ อมูลของพารามิเตอร์ ตางกัน
                                       ่
            public static int test(int x)                      เมท็อด test ตัวที่หนึงมีพารามิเตอร์ ประเภท int
                                                                                    ่
            public static int test(double x)                   เมท็อด test ตัวที่สองมีพารามิเตอร์ ประเภท double

  2. ข้ อสังเกตเกี่ยวกับเมท็อดหลายแบบในชื่อเดียวกัน
     1) เมท็อดแต่ละเมท็อดจะมีประเภทข้ อมูลที่สงกลับ (Return Type) ที่ตางกันหรื อเหมือนกันก็ได้ (ไม่ต้องไป
                                                     ่                       ่
          สนใจ และไม่ใช่เป็ นประเด็นที่จะใช้ พิจารณาเมท็อดประเภทนี ้)
     2) การเปรี ยบเทียบความเหมือนหรื อไม่เหมือนของพารามิเตอร์ ของแต่ละเมท็อด ให้ พิจารณาที่ประเภทข้ อมูล
          ของพารามิเตอร์ เท่านัน ไม่ได้ พิจารณาที่ชื่อของพารามิเตอร์ แต่อย่างใด (ต่างเมท็อดกันชื่อเหมือนกันได้ )
                               ้
     3) ระบบจะเลือกเมท็อดที่เหมาะสมที่สดเพียงเมท็อดเดียวขึ ้นมาใช้ งาน ถ้ าไม่มีเมท็อดใดเลยที่เหมาะสมจะ
                                              ุ
          แปลผลไม่ผาน (Compile-time Error)
                     ่
  โจทย์ ข้อที่ 14 [ระดับง่ าย] จงเลือกใช้ เมท็อดหลายแบบในชื่อเดียวกัน (Overloading Method) ที่เหมาะสม
  ที่สุดจากคําสั่งต่ อไปนี ้ พร้ อมทังแสดงผลลัพธ์ ท่ เกิดจากคําสั่งนัน (15 คะแนน)
                                     ้               ี               ้
      หมายเลขเมท็อด                                       รายละเอียดของเมท็อด
                           public static double m(int n) {
             1               return n * n;
                           }
                           public static int m(double n) {
             2               return (int)(n * n);
                           }
                           public static boolean m(int n, int x) {
             3               return n == x;
                           }
                           public static double m(int a, int b, int c) {
             4               return (double)(a * b * c);
                           }
                           public static int m(char c) {
             5               return (int) c;
                           }
                           public static String m(double n, int x) {
             6               return n + "" + x;
                           }
                           public static int m(double x, double n) {
             7               return (int)(n * x);
                           }

  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้
Methods - 08                                                       Computer Programming using Java          111
  ข้ อ                          คําสั่ง                         หมายเลขเมท็อด               ผลลัพธ์
   1.    System.out.println(m(10));

   2.    System.out.println(m(1, 2.5));

   3.    System.out.println(m(11.0));

   4.    System.out.println(m(6.0f));

   5.    System.out.println(m(12, 2));

   6.    System.out.println(m('1'));

   7.    System.out.println(m(10.0, 2));

   8.    System.out.println(m(2, 2, 1));

   9.    System.out.println(m(m(5, 1, 2)));

  10.    System.out.println(m(m(5, 1.0f)));

  11.    System.out.println(m(1.0f, 2));

  12.    System.out.println(m(0L, 1, 1));

  13.    System.out.println(m(0.0f, (byte) 1));

  14.    System.out.println(m((byte) 1.3, 1));

  15.    System.out.println(m(1.1));



โจทย์ ข้อที่ 15 [ระดับง่ าย] จงเขียนเมท็อดหลายแบบในชื่อเดียวกัน (Overloading Method) ตามข้ อกํา-
หนดต่ อไปนี ้ พร้ อมทังเรี ยกใช้ งานเมท็อดเหล่ านีให้ ถูกต้ องสมบรณ์ (15 คะแนน)
                      ้                           ้              ู
import java.util.Scanner;
public class Overload {
    //เมท็อด main(…) เพื่อเรี ยกใช้ เมท็อด showName(…) ทุกตัวให้ ครบสมบรณ์ และกําหนดค่ าพารามิ-
                                                                       ู
    เตอร์ ได้ อย่ างอิสระ (3 คะแนน)
    public static void main(String[] args) {




    } //End of main

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
112   Computer Programming using Java                                                            08 - Methods


       //เมท็อด showName(…) แบบที่ไม่ มีพารามิเตอร์ เพื่อใช้ แสดงชื่อของนิสิตขึนบนจอภาพ (3 คะแนน)
                                                                               ้




       //เมท็อด showName(…) แบบที่มีพารามิเตอร์ 1 ตัวที่รับชื่อนิสิตชื่อใดๆ เข้ ามาเพื่อใช้ แสดงชื่อของ
       นิสิตคนนันขึนบนจอภาพ (3 คะแนน)
                ้ ้




       //เมท็อด showName(…) แบบที่มีพารามิเตอร์ 2 ตัวที่รับคํานําหน้ าชื่อและชื่อนิสิตชื่อใดๆ เข้ ามาเพื่อ
       ใช้ แสดงคํานําหน้ าชื่อตามด้ วยชื่อของนิสิตคนนันขึนบนจอภาพ (3 คะแนน)
                                                      ้ ้




       //เมท็อด showName(…) แบบที่มีพารามิเตอร์ 2 ตัวที่รับชื่อนิสิตชื่อใดๆ และจํานวนเต็ม x อีกหนึ่งค่ า
       เพื่อใช้ แสดงชื่อของนิสิตคนนันจํานวน x ครังขึนบนจอภาพ (3 คะแนน)
                                    ้            ้ ้




  } //End of class

  © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                              ้

More Related Content

What's hot

Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)Wongyos Keardsri
 
Java-Chapter 11 Recursions
Java-Chapter 11 RecursionsJava-Chapter 11 Recursions
Java-Chapter 11 RecursionsWongyos Keardsri
 
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and ObjectsJava-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and ObjectsWongyos Keardsri
 
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)Wongyos Keardsri
 
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)Wongyos Keardsri
 
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and ObjectsJava-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and ObjectsWongyos Keardsri
 
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Wongyos Keardsri
 
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 AlgorithmsDiscrete-Chapter 09 Algorithms
Discrete-Chapter 09 AlgorithmsWongyos Keardsri
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นFinian Nian
 
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญาสูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญาKanomwan Jeab
 
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชันค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชันsawed kodnara
 
อนุพันธ์
อนุพันธ์อนุพันธ์
อนุพันธ์krurutsamee
 
การอินทีเกรต
การอินทีเกรตการอินทีเกรต
การอินทีเกรตANNRockART
 
เฉลยอินทิเกรต
เฉลยอินทิเกรตเฉลยอินทิเกรต
เฉลยอินทิเกรตkrurutsamee
 
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจแบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจชัชชญา ช่างเจริญ
 
ประวัติ แคลคูลัส
ประวัติ แคลคูลัสประวัติ แคลคูลัส
ประวัติ แคลคูลัสPloy Purr
 
อินทิเกรต
อินทิเกรตอินทิเกรต
อินทิเกรตkrurutsamee
 

What's hot (20)

Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)
 
Java-Chapter 11 Recursions
Java-Chapter 11 RecursionsJava-Chapter 11 Recursions
Java-Chapter 11 Recursions
 
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and ObjectsJava-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
 
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)
 
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)
 
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and ObjectsJava-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and Objects
 
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)
 
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 AlgorithmsDiscrete-Chapter 09 Algorithms
Discrete-Chapter 09 Algorithms
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญาสูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
 
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชันค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
 
อนุพันธ์
อนุพันธ์อนุพันธ์
อนุพันธ์
 
ปริพันธ์
ปริพันธ์ปริพันธ์
ปริพันธ์
 
การอินทีเกรต
การอินทีเกรตการอินทีเกรต
การอินทีเกรต
 
เฉลยอินทิเกรต
เฉลยอินทิเกรตเฉลยอินทิเกรต
เฉลยอินทิเกรต
 
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจแบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
 
Limit
LimitLimit
Limit
 
662305 08
662305 08662305 08
662305 08
 
ประวัติ แคลคูลัส
ประวัติ แคลคูลัสประวัติ แคลคูลัส
ประวัติ แคลคูลัส
 
อินทิเกรต
อินทิเกรตอินทิเกรต
อินทิเกรต
 

Viewers also liked

Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and ApplicationsJava-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and ApplicationsWongyos Keardsri
 
Java-Chapter 06 File Operations
Java-Chapter 06 File OperationsJava-Chapter 06 File Operations
Java-Chapter 06 File OperationsWongyos Keardsri
 
Java-Chapter 05 String Operations
Java-Chapter 05 String OperationsJava-Chapter 05 String Operations
Java-Chapter 05 String OperationsWongyos Keardsri
 
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowJava-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowWongyos Keardsri
 
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional ArraysJava-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional ArraysWongyos Keardsri
 
Java-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration StatementsJava-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration StatementsWongyos Keardsri
 
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysJava-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysWongyos Keardsri
 
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java ProgrammingJava-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java ProgrammingWongyos Keardsri
 
Java-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and ProcessingJava-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and ProcessingWongyos Keardsri
 
การควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรมการควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรมkorn27122540
 
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master ProgramHow to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master ProgramWongyos Keardsri
 

Viewers also liked (12)

Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and ApplicationsJava-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and Applications
 
Java-Chapter 06 File Operations
Java-Chapter 06 File OperationsJava-Chapter 06 File Operations
Java-Chapter 06 File Operations
 
Java-Chapter 05 String Operations
Java-Chapter 05 String OperationsJava-Chapter 05 String Operations
Java-Chapter 05 String Operations
 
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowJava-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindow
 
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional ArraysJava-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional Arrays
 
Java-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration StatementsJava-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration Statements
 
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysJava-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional Arrays
 
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java ProgrammingJava-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java Programming
 
Java-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and ProcessingJava-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and Processing
 
IP address anonymization
IP address anonymizationIP address anonymization
IP address anonymization
 
การควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรมการควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรม
 
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master ProgramHow to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master Program
 

Similar to Java-Chapter 08 Methods

คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นFinian Nian
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานPrapatsorn Keawnoun
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีNattapon
 
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1หน่อย หน่อย
 
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่นJava Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่นThanachart Numnonda
 
Java Programming [12/12] : Thread
Java Programming [12/12] : ThreadJava Programming [12/12] : Thread
Java Programming [12/12] : ThreadIMC Institute
 
น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1
น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1
น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1หน่อย หน่อย
 

Similar to Java-Chapter 08 Methods (20)

คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
07 methods
07 methods07 methods
07 methods
 
Presenter1234567
Presenter1234567Presenter1234567
Presenter1234567
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
 
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
 
เมธอด
เมธอดเมธอด
เมธอด
 
02 basic
02 basic02 basic
02 basic
 
Presenter
PresenterPresenter
Presenter
 
c# part1.pptx
c# part1.pptxc# part1.pptx
c# part1.pptx
 
Power point
Power pointPower point
Power point
 
5.Methods cs
5.Methods cs5.Methods cs
5.Methods cs
 
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่นJava Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่น
 
Java Programming [12/12] : Thread
Java Programming [12/12] : ThreadJava Programming [12/12] : Thread
Java Programming [12/12] : Thread
 
Know4 3
Know4 3Know4 3
Know4 3
 
3.Expression
3.Expression3.Expression
3.Expression
 
Chapter3
Chapter3Chapter3
Chapter3
 
66
6666
66
 
น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1
น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1
น.ส.ศิริวิภา กาญจนาวิล-59170116-sec-1
 
Know1 3
Know1 3Know1 3
Know1 3
 

More from Wongyos Keardsri

The next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applicationsThe next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applicationsWongyos Keardsri
 
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script ProgrammingSysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script ProgrammingWongyos Keardsri
 
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating SystemSysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating SystemWongyos Keardsri
 
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageSysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageWongyos Keardsri
 
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part IIIDiscrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part IIIWongyos Keardsri
 
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part IIDiscrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part IIWongyos Keardsri
 
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part IDiscrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part IWongyos Keardsri
 
Discrete-Chapter 08 Relations
Discrete-Chapter 08 RelationsDiscrete-Chapter 08 Relations
Discrete-Chapter 08 RelationsWongyos Keardsri
 
Discrete-Chapter 07 Probability
Discrete-Chapter 07 ProbabilityDiscrete-Chapter 07 Probability
Discrete-Chapter 07 ProbabilityWongyos Keardsri
 
Discrete-Chapter 06 Counting
Discrete-Chapter 06 CountingDiscrete-Chapter 06 Counting
Discrete-Chapter 06 CountingWongyos Keardsri
 
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and ProofsDiscrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and ProofsWongyos Keardsri
 
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part IIDiscrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part IIWongyos Keardsri
 
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part IDiscrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part IWongyos Keardsri
 
Discrete-Chapter 03 Matrices
Discrete-Chapter 03 MatricesDiscrete-Chapter 03 Matrices
Discrete-Chapter 03 MatricesWongyos Keardsri
 
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and SequencesDiscrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and SequencesWongyos Keardsri
 
Discrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling ComputationDiscrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling ComputationWongyos Keardsri
 

More from Wongyos Keardsri (18)

The next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applicationsThe next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applications
 
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script ProgrammingSysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script Programming
 
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating SystemSysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating System
 
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageSysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming Language
 
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part IIIDiscrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part III
 
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part IIDiscrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part II
 
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part IDiscrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part I
 
Discrete-Chapter 10 Trees
Discrete-Chapter 10 TreesDiscrete-Chapter 10 Trees
Discrete-Chapter 10 Trees
 
Discrete-Chapter 08 Relations
Discrete-Chapter 08 RelationsDiscrete-Chapter 08 Relations
Discrete-Chapter 08 Relations
 
Discrete-Chapter 07 Probability
Discrete-Chapter 07 ProbabilityDiscrete-Chapter 07 Probability
Discrete-Chapter 07 Probability
 
Discrete-Chapter 06 Counting
Discrete-Chapter 06 CountingDiscrete-Chapter 06 Counting
Discrete-Chapter 06 Counting
 
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and ProofsDiscrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and Proofs
 
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part IIDiscrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part II
 
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part IDiscrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part I
 
Discrete-Chapter 03 Matrices
Discrete-Chapter 03 MatricesDiscrete-Chapter 03 Matrices
Discrete-Chapter 03 Matrices
 
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and SequencesDiscrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and Sequences
 
Discrete-Chapter 01 Sets
Discrete-Chapter 01 SetsDiscrete-Chapter 01 Sets
Discrete-Chapter 01 Sets
 
Discrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling ComputationDiscrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling Computation
 

Java-Chapter 08 Methods

  • 1. Methods - 08 Computer Programming using Java 93 CHAPTER เมท็อด 08 (Methods) 1. ความร้ ูเบืองต้ นเกี่ยวกับเมท็อด (Introduction to Methods) ้ 1. นิยามของเมท็อด 1) เมท็อด (Methods) คือ โปรแกรมย่อยที่ทําหน้ าที่เฉพาะ ซึงมีลกษณะเดียวกับ Subroutine, Sub-program ่ ั และ Function โดยเมท็อดช่วยลดความซํ ้าซ้ อนของโปรแกรมที่ทํางานซํ ้าๆ ได้ 2) เมท็อดทุกเมท็อดจะปรากฏอยูในคลาส (Class) ซึงคลาสจะรวบรวมเมท็อดเอาไว้ เป็ นกลุมก้ อน ่ ่ ่ 3) รู ปแบบของโปรแกรมในช่วงก่อนหน้ านี ้เป็ นโปรแกรมแบบ 1 คลาส 1 เมท็อด แต่รูปแบบของโปรแกรม ในช่วงต่อจากนี ้เป็ นต้ นไปจะเป็ นโปรแกรมแบบ 1 คลาส หลายเมท็อด หรื อ หลายคลาสหลายเมท็อด (1) โปรแกรมแบบ 1 คลาส 1 เมท็อด จะรวมส่วนของโปรแกรมทุกส่วนไว้ ในเมท็อด main และมีการประ- มวลผลแบบตามลําดับจากบนลงล่าง (2) โปรแกรมแบบ 1 คลาส หลายเมท็อด จะแบ่งส่วนของโปรแกรมแต่ละส่วนออกเป็ นเมท็อดแต่ละเมท็อด โดยมีเมท็อด main เป็ นศูนย์กลาง และมีการประมวลผลแบบแยกส่วนย่อยกระโดดไปมาตามการเรี ยก ใช้ งานของเมท็อดต่างๆ (การประมวลผลขึ ้นกับคําสังในเมท็อด main ถ้ าไม่มี main จะไม่ประมวลผล) ่ 1 คลาส 1 เมท็อด (เมท็อด main) 1 1 คลาส หลายเมท็อด 7 class Operation { 2 เรี ยก class Operation { main(...) { main(...) { ใช้ งาน 1 ส่งค่า add() sub() 6 เริ่ มต้ น 3 ... //add } รับ 4 รับ ทํางานแบบ add(...) { ทํางาน 5 ตามลําดับ //sub } คืนค่า จากบนลงล่าง ทํางานแบบ sub(...) { 2 } แยกส่วนย่อย } สิ ้นสุด กระโดดไปมา } //End of class } //End of class 4) ตัวอย่างของโปรแกรมแบบ 1 คลาส หลายเมท็อด 1 เรี ยก add(4, 10) 2 ส่งค่า 4 กับ 10 1 public class Example { 2 public static void main(String[] args) { 3 int n = add(4, 10); 3 รับ add(int x, int y) 4 System.out.println(n); 5 } 4 ทํางาน 4 + 10 6 public static int add(int x, int y) { 7 return x + y; 5 คืนค่า return 14 8 } 9 } 7 ใช้ งาน System.out.println(n) 6 รับ int n = 14 © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 2. 94 Computer Programming using Java 08 - Methods โจทย์ ข้อที่ 1 [ระดับง่ าย] จากตัวอย่ างโปรแกรมต่ อไปนี ้ จงพิจารณาคํากล่ าวแต่ ละข้ อว่ ากล่ าวผิด ( ) หรื อถูก ( ) (20 คะแนน) 1 import java.util.Scanner; 2 public class Test { 3 public static void main(String[] args) { 4 Scanner kb = new Scanner(System.in); 5 6 double a = kb.nextDouble(); ตังใจจะใส่คา 5.0 ้ ่ int b = kb.nextInt(); 7 double n = mul(a, b); 8 int m = mod(13); ตังใจจะใส่คา 2 ้ ่ 9 System.out.println(n + m); 10 } 11 private static double mul(double x, int y) { 12 double n = x * y; 13 14 } return n; บางเมท็อดอาจเขียนอยูในรูปแบบอื่นที่ไม่ใช่ public ่ 15 protected static int mod(int x) { static ก็ได้ เช่น private static เป็ นต้ น ซึง ่ 16 return x % 3; 17 } จะได้ กล่าวรายละเอียดอีกครังในบทที่ 12 ้ 18 } 1) คลาส Test มีเมท็อดทังหมด 3 เมท็อด ้ 2) ถ้ าตัดเมท็อด main ออกจะทําให้ แปลผล (Compile) ไม่ผาน และสังงาน (Run) ไม่ผาน ่ ่ ่ 3) เมท็อด main สามารถเรียกใช้ เมท็อด mod ก่อนเรี ยกใช้ เมท็อด mul ได้ 4) เมท็อด mod สามารถเรี ยกใช้ เมท็อด mul ได้ 5) เมท็อด mod สามารถเรี ยกใช้ เมท็อด main ได้ 6) เมท็อด mod สามารถเรี ยกใช้ เมท็อด mod ได้ 7) ถ้ าต้ องการเรี ยกใช้ เมท็อด mul จะต้ องส่งค่า 2 ค่าที่เป็ นจํานวนจริงและจํานวนเต็มไปยังเมท็อด mul 8) ถ้ าต้ องการเรี ยกใช้ เมท็อด mod จะต้ องส่งค่า 1 ค่าที่เป็ นจํานวนจริงไปยังเมท็อด mod 9) ค่า n ในบรรทัดที่ 7 กับค่า n ในบรรทัดที่ 12 มีคาเท่ากันเพราะเป็ นตัวแปรตัวเดียวกัน ่ 10) ค่า x ในบรรทัดที่ 15 กับค่า x ในบรรทัดที่ 16 มีคาเท่ากันเพราะเป็ นตัวแปรตัวเดียวกัน ่ 11) ค่า x ในเมท็อด mod จะมีคาเท่ากับ 4 เมื่อเรี ยกใช้ งานคําสัง mod(4) ่ ่ 12) ผลลัพธ์ท่ีได้ จากการประมวลผลในเมท็อด mul จะมีประเภทข้ อมูลเป็ น int 13) ผลลัพธ์ที่ได้ จากการประมวลผลในเมท็อด mod จะมีประเภทข้ อมูลเป็ น int 14) ผลลัพธ์ที่ได้ จากการประมวลผลบรรทัดที่ 7 และ 8 คือ 10.0 และ 1.0 ตามลําดับ 15) ผลลัพธ์ที่ได้ จากการประมวลผลคําสัง mul(2, 1) คือ 2.0 ่ 16) ผลลัพธ์ที่ได้ จากการประมวลผลคําสัง mod(8, 3) คือ 2.0 ่ 17) ผลลัพธ์ที่แสดงผลบนจอภาพที่ได้ จากการประมวลผลของคลาส Test คือ 11.0 18) คําสัง return ในบรรทัดที่ 13 และ 16 เป็ นคําสังที่ใช้ คนผลคําตอบที่ได้ จากการประมวลผลของเมท็อด ่ ่ ื 19) คําสังภายในเมท็อด mul ตังแต่บรรทัดที่ 12-13 สามารถเขียนใหม่ได้ เป็ น return x * y; ่ ้ 20) เมท็อด main ไม่มีคําสัง return เพราะว่าเมท็อด main เป็ นประเภท void ่ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 3. Methods - 08 Computer Programming using Java 95 2. โครงสร้ างของเมท็อดและการเขียนเมท็อด (Method Structure and Creating Method) 1. โครงสร้ างโดยรวมของเมท็อด สามารถแบ่งออกเป็ น 2 ส่วนหลักได้ แก่ หัวเมท็อดและตัวเมท็อด ดังตัวอย่าง คืนค่ าออกไป รั บค่ าเข้ ามา ทางออก ทางเข้ า public static double add(int x, int y) { หัวเมท็อด double cal = x + y; ตัวเมท็อด ข้ อมูลจากทางเข้ าและข้ อมูลที่ return cal; } ประมวลผล ทางออกไม่ได้ สมพันธ์กน ั ั คืนค่า จากตัวอย่างสามารถแจกแจงส่วนประกอบย่อยของเมท็อดออกเป็ น 6 ส่วนดังต่อไปนี ้ 1 2 3 4 <ตัวบ่งคุณลักษณะ> <ประเภท> <ชื่อ> (<ตัวแปรรับเข้ า>) { ไม่วาภายในเมท็อดจะมีกี่คําสังก็ตามจะ ่ ่ ต้ องใส่เครื่ องหมายปี กกาเปิ ด-ปิ ดเสมอ <คําสังประมวลผล> 5 ่ ... ส่วนประกอบที่ 1-4 คือ หัวเมท็อด (Head) <คําสังส่งกลับข้ อมูล> 6 ่ ส่วนประกอบที่ 5-6 คือ ตัวเมท็อด (Body) } . 2. หัวเมท็อด (Head) เป็ นส่วนที่แสดงถึงรูปแบบ โครงสร้ างและข้ อกําหนดของเมท็อด ซึงมีสวนประกอบดังต่อไปนี ้ ่ ่ 1) ตัวบ่ งคุณลักษณะ (Modifier) คือ ส่วนที่กําหนดคุณลักษณะและคุณสมบัติบางประการของเมท็อด ซึ่ง ได้ แก่ public, private, protected, static ฯลฯ โดยจะอธิบายอีกครังในเรื่ องคลาสและอ๊ อบเจ็ค แต่ ้ ในบทนี ้ให้ เขียนตัวบ่งคุณลักษณะของทุกเมท็อดเป็ นแบบ public static เท่านัน ดังตัวอย่าง ้ public static double power(double n) ส่วนนี ้มีก็ได้ ไม่มีก็ได้ ตัดออกได้ 2) ประเภทเมท็อด (Method Type) หรื อประเภทข้ อมลที่ส่งกลับ (Return Type) คือ ประเภทข้ อมูลที่ ู เป็ นผลลัพธ์สดท้ ายของเมท็อดที่จะคืนค่ากลับ ซึงได้ แก่ประเภทข้ อมูล byte, short, int, long, float, ุ ่ double ฯลฯ หากเมท็อดไม่มีการคืนค่ากลับให้ ระบุเป็ นประเภท void ดังตัวอย่าง protected void show(float y, String s) ส่วนนี ้ต้ องมีเสมอ ตัดออกไม่ได้ ในกรณีที่ประเภทข้ อมูลที่ส่งกลับมีโครงสร้ างข้ อมูลเป็ นแบบอาเรย์ ให้ ระบุเครื่ องหมายวงเล็บเหลี่ยม (Brackets) ต่อท้ายประเภทเมท็อดนันด้ วย ดังตัวอย่าง ถ้ าเป็ นอาเรย์สองมิตให้ ระบุเป็ น int[][] ้ ิ private static int[] sort(int x[]) ในกรณีที่คืนค่ามากกว่า 1 ค่าจะต้ องอยูในรูปอาเรย์ ่ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 4. 96 Computer Programming using Java 08 - Methods 3) ชื่อเมท็อด (Method Name) คือ ชื่อที่อ้างถึงหรื อชื่อเรี ยกเมท็อด ซึ่งควรขึ ้นต้ นด้ วยอักษรตัวพิมพ์เล็ก (เป็ นไปตามกฎการตังชื่อตัวแปร) และชื่อควรเป็ นคํากริ ยาหรื อคําที่แสดงการกระทํา เช่น getID(…), ้ addNumber(…) เป็ นต้ น และหลังชื่อเมท็อดต้ องตามด้ วยเครื่ องหมายวงเล็บเปิ ด-ปิ ดเสมอ ดังตัวอย่าง public static double add (int x, int y) ส่วนนี ้ต้ องมีเสมอ ตัดออกไม่ได้ 4) ตัวแปรรับเข้ า (Parameters) คือ ค่าหรื อตัวแปรที่รับเข้ ามายังเมท็อดเพื่อใช้ ประมวลผลภายในเมท็อด ซึง ่ ตัวแปรรับเข้ าของเมท็อดหนึ่งๆ จะมีหรื อไม่มีก็ได้ ถ้ ามีจะมีกี่ตวก็ได้ ถ้ ามีหลายตัวแต่ละตัวต้ องคันด้ วย ั ่ เครื่ องหมายจุลภาค (Comma) และทุกตัวต้ องมีประเภทข้ อมูลกํากับเสมอ เช่น set(int a, int b) ห้ ามเขียนเป็ น set(int a, b) โดยเด็ดขาด ดังตัวอย่าง คล้ ายกับการประกาศตัวแปร public double mul(int x, double y, int z) ส่วนนี ้มีก็ได้ ไม่มีก็ได้ ตัดออกได้ ในกรณีที่พารามิเตอร์ มีโครงสร้ างข้ อมูลเป็ นแบบอาเรย์ ให้ ระบุเครื่ องหมายวงเล็บเหลี่ยมไว้ ข้างหน้าหรื อ ต่อท้ายชื่อพารามิเตอร์ นนด้ วย ดังตัวอย่าง ั้ public static int find(int x, int y[][]) มีพารามิเตอร์ ที่เป็ นอาเรย์สองมิติ โจทย์ ข้อที่ 2 [ระดับง่ าย] จงเติมเต็มส่ วนหัวเมท็อดให้ สมบรณ์ ตามรปแบบของเมท็อดต่ อไปนี ้ (10 คะแนน) ู ู 1) เมท็อดชื่อ square มีข้อมลรั บเข้ า 1 ค่ าที่เป็ นจํานวนจริ ง เพื่อใช้ คํานวณหาค่ ายกกําลังสองของ ู จํานวนนัน พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน) ้ ้ double square( ) 2) เมท็อดชื่อ root มีข้อมูลรั บเข้ า 1 ค่ าที่เป็ นจํานวนเต็ม เพื่อใช้ คานวณหาค่ ารากที่สองของจํานวนนัน ํ ้ พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน) ้ protected static ( ) 3) เมท็อดชื่อ showName มีข้อมลรั บเข้ า 1 ค่ าที่เป็ นชื่อของบุคคลใดๆ เพื่อใช้ แสดงชื่อของบุคคลนันขึน ู ้ ้ บนจอภาพ โดยไม่ ต้องส่ งค่ าคําตอบกลับ (2 คะแนน) private static showName( ) 4) เมท็อดชื่อ countX มีข้อมลรั บเข้ าที่เป็ นอาเรย์ 1 มิตประเภทจํานวนเต็มและตัวเลขจํานวนเต็ม เพื่อ ู ิ ใช้ นับจํานวนสมาชิกในอาเรย์ ท่ มีค่าเท่ ากับจํานวนเต็มที่รับมา พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน) ี ้ static 5) เมท็อดชื่อ revArray มีข้อมลรั บเข้ า 1 ค่ าที่เป็ นอาเรย์ 1 มิติประเภทจํานวนจริง เพื่อใช้ กลับค่ า ู (Reverse) สมาชิกในอาเรย์ นัน พร้ อมทังส่ งค่ าคําตอบกลับ (2 คะแนน) ้ ้ revArray © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 5. Methods - 08 Computer Programming using Java 97 3. ตัวเมท็อด (Body) เป็ นส่วนที่แสดงรายละเอียดของการประมวลผลและการส่งกลับข้ อมูลของเมท็อด ซึงมีดงต่อไปนี ้ ่ ั 1) การประมวลผล ซึงได้ แก่การประกาศตัวแปรเพื่อใช้ ภายในเมท็อด และการใช้ คําสังต่างๆ เช่น if-else, ่ ่ while, for, Scanner ในการประมวลผลภายในเมท็อด ซึงหลักการเหล่านี ้จะเหมือนกับเนื ้อหาก่อนหน้ า ่ นี ้ตังแต่บทที่ 1-7 ที่ได้ เรี ยนมาแล้ วทุกประการ ้ 2) การส่ งกลับข้ อมล เป็ นการส่งค่าหรื อคืนค่าคําตอบที่ได้ จากการประมวลผลในเมท็อดกลับไปยังเมท็อดที่ ู เรี ยกใช้ ซึงค่าที่สงกลับ (Return Value) จะต้ องตรงกับประเภทเมท็อด (Method Type) หรื อ ประเภทข้ อมูล ่ ่ ที่สงกลับ (Return Type) ที่ประกาศไว้ ที่หวเมท็อดเสมอ หรื อถ้ าไม่ตรงกันจะต้ องสามารถสอดใส่กนได้ ซึง ่ ั ั ่ การส่งกลับจะใช้ คําสัง return และสามารถทําได้ เพียงครังเดียวเท่านัน ถ้ ามีคําสัง return หลายกรณีจะ ่ ้ ้ ่ ทําเพียงกรณีแรกที่เป็ นจริ ง แต่ถ้าประเภทเมท็อดเป็ น void ไม่ต้องมีคําสัง return ดังตัวอย่าง ่ 1 public static double div(int a, int b){ เมท็อดเป็ นประเภท double 2 double x = (double) a / (double) b; 3 return x; 4 } ค่าที่จะส่งกลับ (ค่าของตัวแปร x) จะต้ องมีประเภทข้ อมูลเป็ น double 3) การส่ งกลับข้ อมลแบบหลายค่ า ถ้ าเมท็อดประมวลผลแล้ วได้ ผลลัพธ์ที่เป็ นคําตอบสุดท้ ายมากกว่า 1 ค่า ู จะต้ องส่งค่ากลับโดยใช้ อาเรย์ (หนึ่งมิติ) โดยการเก็บค่าคําตอบทุกค่าไว้ ในอาเรย์แล้ วคืนค่าของอาเรย์นน ั้ เพียงค่าเดียวกลับไปยังเมท็อดที่เรี ยกใช้ ซึงจะทําให้ ได้ ผลคําตอบทุกค่าคืนกลับมาด้ วย ดังตัวอย่าง ่ 1 public static int[] findFirstLast(int a[]) { 2 int x[] = new int[2]; 3 x[0] = a[0]; ประเภทข้ อมูลที่สงกลับที่หวเมท็อดต้ องเป็ นอาเรย์ ่ ั 4 x[1] = a[a.length – 1]; 5 return x; การส่งกลับข้ อมูลแบบอาเรย์จะเขียนเฉพาะชื่อของอาเรย์ 6 } โดยไม่ต้องใส่เครื่ องหมายวงเล็บเหลี่ยม โจทย์ ข้อที่ 3 [ระดับง่ าย] จงพิจารณาเมท็อดต่ อไปนีเ้ ขียนผิด ( ) หรื อถูก ( ) ตามหลักไวยากรณ์ ของ ภาษาจาวาพร้ อมทังบอกเหตุผลกํากับ (10 คะแนน) ้ 1) public static printError(String msg) { System.err.println(msg); } 2) protected static int flip(int n) { if (n == 1) n = 0; } 3) public static float max(long x, y) { if (x > y) return x; else return y; } 4) private static void showChar() { for(char i = '0'; i <= '9'; i++) { System.out.println(i); } return; } © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 6. 98 Computer Programming using Java 08 - Methods 5) static String calGrade(int x) { if (x > 80) return "A"; else if (x < 50) return "F"; else System.out.println("C"); } 6) double getLen(double dx, double dy) { double dx = Math.abs(dx); return Math.sqrt(dx*dx + dy*dy); } 7) public private boolean checkLen(int x[], int y[]) { return x.length == y.length; } 8) public float getLocationPoint() { return 0.0; } 9) public static int fac(int x) { if(x <= 1) return 1; else return fac(x – 1) * x; } 10) int[] getThreeMember(int[] x) { int n[] = { x[0], x[1], x[2] }; return n[]; } โจทย์ ข้อที่ 4 [ระดับง่ าย] จงเขียนเมท็อดอย่ างง่ ายตามรปแบบการทํางานที่ระบุไว้ ต่อไปนี ้ (16 คะแนน) ู 1) เมท็อดชื่อ addRealNumber มีข้อมลรั บเข้ าเป็ นตัวเลขจํานวนจริ ง 3 จํานวน ซึ่งใช้ ในการหาผลบวก ู ของตัวเลข 3 จํานวนนันแล้ วมีการคืนค่ ากลับ (4 คะแนน) ้ 2) เมท็อดชื่อ printX มีข้อมลรั บเข้ าเป็ นตัวเลขจํานวนเต็ม 1 จํานวน เพื่อใช้ ในการแสดงผลลัพธ์ ออก ู ทางจอภาพภายในเมท็อดนันโดยไม่ คนค่ ากลับ (4 คะแนน) ้ ื 3) เมท็อดชื่อ divideByInt ใช้ ในการหาผลหารระหว่ างตัวเลข 2 จํานวน ซึ่งเป็ นจํานวนจริงและจํานวน เต็มอย่ างละ 1 จํานวน แล้ วมีการคืนค่ ากลับ (4 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 7. Methods - 08 Computer Programming using Java 99 4) เมท็อดชื่อ fullName ใช้ ในการรวมชื่อและนามสกุลที่รับเข้ ามาให้ เป็ นชื่อเต็ม (ระหว่ างชื่อและ นามสกุลต้ องมีการเว้ นวรรคด้ วย) แล้ วคืนค่ ากลับ (4 คะแนน) โจทย์ ข้อที่ 5 [ระดับง่ าย] จงเขียนเมท็อด fac(…) ที่สมบรณ์ เพื่อใช้ ในการคํานวณหาค่ าแฟกทอเรี ยล ู (Factorial) ของตัวเลขจํานวนเต็มที่ระบุ เช่ น fac(3) = 6, fac(5) = 120 เป็ นต้ น (10 คะแนน) โจทย์ ข้อที่ 6 [ระดับง่ าย] เมท็อดชื่อ findMax มีข้อมลรั บเข้ าที่เป็ นชุดของตัวเลขจํานวนจริง 50 จํานวน ู เพื่อนํามาหาค่ าตัวเลขที่มากที่สุดใน 50 จํานวนนัน แล้ วมีการคืนค่ ากลับ (10 คะแนน) ้ โจทย์ ข้อที่ 7 [ระดับปานกลาง] จงเขียนเมท็อด underX(…) ที่สมบรณ์ เพื่อใช้ คํานวณและนับว่ ามีสมาชิก ู ในอาเรย์ หนึ่งมิตช่ ือ a กี่จานวนที่มีค่าน้ อยกว่ าจํานวนเต็ม x โดยให้ รับอาเรย์ a และตัวแปร x ผ่ านทาง ิ ํ พารามิเตอร์ (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 8. 100 Computer Programming using Java 08 - Methods โจทย์ ข้อที่ 8 [ระดับปานกลาง] จงเขียนเมท็อด isPrime(…)ที่สมบรณ์ เพื่อใช้ ตรวจสอบตัวเลขจํานวน ู เต็มที่รับเข้ ามาทางพารามิเตอร์ ว่าเป็ นจํานวนเฉพาะหรือไม่ (10 คะแนน) โจทย์ ข้อที่ 9 [ระดับปานกลาง] จงเขียนเมท็อด memberOfArray(…) ที่สมบรณ์ เพื่อค้ นหาลําดับของสมา- ู ชิกตัวแรกในอาเรย์ หนึ่งมิตช่ ือ a ที่มีค่าเท่ ากับจํานวนเต็ม x ถ้ าค้ นเจอมากกว่ า 1 จํานวนให้ คืนค่ าเพียง ิ สมาชิกตัวแรกที่ ค้นเจอโดยเริ่มจากตัวซ้ ายสุด แต่ ถ้าค้ นไม่ เจอให้ คืนค่ า -1 (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 9. Methods - 08 Computer Programming using Java 101 โจทย์ ข้อที่ 10 [ระดับยาก] จงเขียนเมท็อด appendArray(…) เพื่อรั บพารามิเตอร์ สองค่ าที่เป็ นอาเรย์ ชนิ ด จํ า นวนเต็ ม ทั ง ค่ ู แ ล้ วคื น ค่ า เป็ นอาเรย์ ชนิ ด จํ า นวนเต็ ม ที่ เ กิ ด จากการเอาข้ อ มลในอาเรย์ ข อง ้ ู พารามิเตอร์ ตวที่สองไปต่ อท้ ายตัวที่หนึ่ง เช่ น a[] = {1, 2, 3 } และ b[] = {5, 6} จะได้ ผลลัพธ์ ั ดังนี ้ appendArray(a, b) = {1, 2, 3, 5, 6} เป็ นต้ น (10 คะแนน) 3. การเรี ยกใช้ เมท็อดอย่ างง่ าย (Simple Method Calling) 1. บทบาทของเมท็อด ในการเรี ยกใช้ เมท็อดจะประกอบไปด้ วยเมท็อด 2 ฝ่ ายได้ แก่ 1) เมท็อดผู้เรี ยก ทําหน้ าที่เป็ นผู้ไปเรี ยกใช้ เมท็อดอื่น 2) เมท็อดผู้ถกเรี ยก ทําหน้ าที่เป็ นผู้ที่ให้ เมท็อดอื่นมาเรี ยกใช้ ตวมัน ู ั 1 public static void main(String[] args) { 2 int n = add(5, 3); เมท็อด main เป็ นผู้เรี ยก 3 } 4 public static int add(int x, int y) { (เรี ยกใช้ เมท็อด add) 5 return x + y; 6 } เมท็อด add เป็ นผู้ถกเรี ยก (ถูกเรี ยกใช้ โดยเมท็อด main) ู 2. ขันตอนการเรี ยกใช้ เมท็อดอย่ างง่ าย ้ 1) ระบุชื่อเมท็อดที่ต้องการจะเรี ยก เช่น add(…) (ต้ องมีเครื่ องหมายวงเล็บเปิ ด-ปิ ดเสมอ) 2) ระบุคาพารามิเตอร์ ทกตัวของเมท็อดให้ ถกต้ องตามประเภทข้ อมูล เช่น add(5, 3) (ค่าของพารามิเตอร์ ่ ุ ู สามารถระบุเป็ นชื่อตัวแปรหรื อนิพจน์ก็ได้ เช่น add(x, y * 2)) 3) สร้ างตัวแปรเพื่อมารับคําตอบที่ได้ จากการประมวลผลของเมท็อด เช่น int n = add(5, 3); (1) ถ้ าเมท็อดที่ต้องการจะเรี ยกคืนค่าข้ อมูลประเภท byte, short, int, long, float, double ฯลฯ ให้ สร้ างตัวแปรเพื่อรับคําตอบตามประเภทข้ อมูลนันๆ เช่น String s = getName(53300121); ้ (2) ถ้ าเมท็อดที่ต้องการจะเรี ยกไม่คืนค่าหรื อมีประเภทข้ อมูลเป็ น void ไม่ต้องสร้ างตัวแปรเพื่อรับคําตอบ (สามารถเรี ยกใช้ เมท็อดโดยไม่ต้องมีตวแปรมารับ) เช่น showName(53300121); ั © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 10. 102 Computer Programming using Java 08 - Methods 1 public static void main(String[] args) { String s = getName(53300121); เมท็อด main เรี ยกใช้ เมท็อด 2 3 System.out.println(s); getName โดยส่งพารามิเตอร์ 4 showName(53300121); 5 } ประเภท int ไปประมวลผลและสร้ าง 6 public static String getName(int id) { ตัวแปร s เพื่อรับคําตอบที่คืนกลับมา 7 return "Wongyos"; 8 } 9 public static void showName(int id) { เมท็อด main เรี ยกใช้ เมท็อด showName 10 System.out.println("Wongyos"); 11 } แบบโดดๆ โดยส่งพารามิเตอร์ ประเภท int ไปประมวลผล ซึงไม่มีการคืนค่ากลับ ่ 4) การส่งค่าและรับค่าอาเรย์ (1) การส่งค่าอาเรย์ไปยังเมท็อดใดๆ ให้ ระบุเพียงชื่ออาเรย์เท่านัน โดยไม่ต้องใส่วงเล็บเหลี่ยม เช่น ้ int n[] = { 1, 2, 3, 4 }; int c = underX(n, 3); (2) การรับค่าที่คืนกลับมาจากเมท็อดใดๆ ในรูปของอาเรย์ ให้ ประกาศอาเรย์มารับ (ไม่ต้องใช้ คําสัง new) เช่น ่ int x[] = { 1, 2, 3, 4 }, y[] = { 5, 7, 9 }; int z[] = appendArray(x, y); 3. ข้ อสังเกตในการเรี ยกใช้ เมท็อด 1) การเรี ยกใช้ เมท็อด (ที่สร้ างเสร็ จสมบูรณ์แล้ ว) จะระบุเพียงค่าพารามิเตอร์ ของเมท็อดที่ต้องการจะเรี ยกใช้ เท่านัน โดยไม่ต้องระบุประเภทข้ อมูลของพารามิเตอร์ (byte, short ฯลฯ) เช่น int n = add(x, y); ้ 2) การประกาศและสร้ างเมท็อด (ที่ยงไม่เคยสร้ างแต่กําลังจะสร้ าง) จะต้ องระบุทงชื่อพารามิเตอร์ และประเภท ั ั้ ข้ อมูลของพารามิเตอร์ ทกๆ ตัว ของเมท็อดที่จะสร้ างขึ ้นใหม่ เช่น public ... add(int x, int y) ุ 1 public static void main(String[] args) { 2 int x = 5, y = 3; 3 int n = add(x, y); การเรี ยกใช้ เมท็อด ใส่คาพารามิเตอร์ โดยไม่ต้องระบุประเภทข้ อมูล ่ 4 } 5 public static int add(int x, int y) { การประกาศและสร้ างเมท็อด ใส่ชื่อพา- 6 return x + y; 7 } รามิเตอร์ และระบุประเภทข้ อมูล ตัวแปร x และ y ในเมท็อด main จะเป็ นคนละตัว กับตัวแปร x และ y ในเมท็อด add โจทย์ ข้อที่ 11 [ระดับง่ าย] จงเขียนคําสั่งการเรี ยกใช้ งานเมท็อด จากหัวเมท็อดที่กาหนดให้ ต่อไปนี ้ โดย ํ สามารถกําหนดค่ าของพารามิเตอร์ ของเมท็อดที่เรียกใช้ ได้ อย่ างอิสระ (10 คะแนน) ข้ อ หัวเมท็อด เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด 1. public static void set(int m, int n) 2. public static int cals(int m, float n) 3. public static String toString(int[] n) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 11. Methods - 08 Computer Programming using Java 103 ข้ อ หัวเมท็อด เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด 4. public static int[] get(int m, String s) 5. public static void sort(double d[]) 6. public static boolean check(long id) 7. public static int flip(int m, boolean b) 8. public static double[] inputArray() 9. public static void showLogo() 10. public static byte f(int m, int n, int p) โจทย์ ข้อที่ 12 [ระดับง่ าย – ระดับยาก] จงเขียนเมท็อดต่ างๆ ในคลาส ArrayUtility ให้ สมบรณ์ เพื่อใช้ ู ประมวลผลกั บ อาเรย์ โดยมี ร ายละเอีย ดของเมท็อดดัง ต่ อไปนี ้ และกํา หนดให้ เ มท็อดแต่ ล ะเมท็อ ด สามารถเรียกใช้ งานซึ่งกันและกันได้ อย่ างอิสระ (75 คะแนน) import java.util.Scanner; public class ArrayUtility { //[ระดับง่ าย] เมท็อด main(…) เพื่อเรียกใช้ งานเมท็อดอื่นๆ ให้ ครบถ้ วนพร้ อมทังแสดงผลลัพธ์ ขึนบน ้ ้ จอภาพให้ สวยงาม โดยสามารถกําหนดค่ าพารามิเตอร์ ของแต่ ละเมท็อดได้ อย่ างอิสระ (5 คะแนน) public static void main(String[] args) { int a[] = { 5, 1, 6, 1, 4, 1, 2, 1, 4, 3, 1, 5, 7, 2, 1, 1 }; sort(a); System.out.println(max(a)); ตัวอย่ างการเรียกใช้ เมท็อดพร้ อมทังการแสดงผล ้ System.out.println(min(a)); ข้ อ เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด เมท็อดที่เรียก 1. count(…) 2. mode(…) 3. majority(…) 4. median(…) 5. range(…) } //End of main © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 12. 104 Computer Programming using Java 08 - Methods //[ระดับปานกลาง] เมท็อด swap(…) ใช้ ในการสลับค่ าสมาชิกในอาเรย์ ตามตําแหน่ ง i และ j ที่ระบุ เช่ นคําสั่ง swap(a, i, j) คือการสลับค่ าสมาชิกตําแหน่ งที่ i และ j ของอาเรย์ a เป็ นต้ น โดยไม่ ต้ องคืนค่ ากลับ (5 คะแนน) //[ระดับปานกลาง] เมท็อด sort(…) ใช้ จัดเรี ยงข้ อมลในอาเรย์ จากน้ อยไปหามากโดยใช้ การจัดเรี ยง ู แบบฟอง (Bubble Sort) โดยไม่ ต้องคืนค่ ากลับ (10 คะแนน) //[ระดับปานกลาง] เมท็อด count(…) ใช้ นับจํานวนสมาชิกในอาเรย์ ท่ ีมีค่าเท่ ากับจํานวนเต็ม k ที่ระ- บุ (นับความถี่) แล้ วคืนค่ าจํานวนที่นับได้ (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 13. Methods - 08 Computer Programming using Java 105 //[ระดับยาก] เมท็อด mode(…) ใช้ หาค่ าฐานนิยม โดยจะคืนค่ าสมาชิกในอาเรย์ ท่ ีมีค่าความถี่สูงสุด หรือปรากฎจํานวนครั งมากที่สุด ถ้ ามีหลายค่ าให้ คนค่ าใดก็ได้ เพียงค่ าเดียว (10 คะแนน) ้ ื //[ระดับยาก] เมท็อด majority(…) ใช้ หาค่ าหม่ ูมาก โดยจะคืนค่ าสมาชิกในอาเรย์ ท่ ีมีค่าความถี่มาก กว่ าครึ่งหนึ่งของจํานวนสมาชิกทังหมด ถ้ าหาไม่ ได้ ให้ คืนค่ า -1 (10 คะแนน) ้ //[ระดับปานกลาง] เมท็อด median(…) ใช้ หาค่ ามัธยฐาน พร้ อมทังคืนค่ ากลับ (10 คะแนน) ้ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 14. 106 Computer Programming using Java 08 - Methods //[ระดับง่ าย] เมท็อด max(…) ใช้ หาค่ าสงสุดของสมาชิกในอาเรย์ พร้ อมทังคืนค่ ากลับ (5 คะแนน) ู ้ //[ระดับง่ าย] เมท็อด min(…) ใช้ หาค่ าตํ่าสุดของสมาชิกในอาเรย์ พร้ อมทังคืนค่ ากลับ (5 คะแนน) ้ //[ระดับง่ าย] เมท็อด range(…) ใช้ หาค่ าพิสัยของอาเรย์ พร้ อมทังคืนค่ ากลับ (5 คะแนน) ้ } //End of class โจทย์ ข้อที่ 13 [ระดับยาก] โปรแกรมต่ อไปนีเ้ ป็ นโปรแกรมที่เขียนคําสั่งทุกคําสั่งไว้ ในเมท็อด main(…) เพียงเมท็อดเดียว โดยโปรแกรมนีใช้ สําหรั บสร้ างอาเรย์ 1 มิตประเภทจํานวนเต็ม 2 ตัว พร้ อมทังรั บค่ า ้ ิ ้ สมาชิกผ่ านทางแปนพิมพ์ เก็บไว้ ในอาเรย์ แต่ ละช่ องจนครบสมบรณ์ หลังจากนันทําการตรวจสอบการ ้ ู ้ เท่ ากันของอาเรย์ ทังสองว่ าเท่ ากันหรื อไม่ พร้ อมทังแสดงผลลัพธ์ ขึนบนจอภาพ จากนันทําการจัดเรี ยง ้ ้ ้ ้ ข้ อมลจากน้ อยไปหามากของอาเรย์ ทังสองแล้ วตรวจสอบการเท่ ากันของอาเรย์ อีกครั งหนึ่ งว่ าเท่ ากัน ู ้ ้ หรื อไม่ พร้ อมทังแสดงผลลัพธ์ ขึนบนจอภาพ สุดท้ ายทําการแสดงสมาชิกแต่ ละตัวของอาเรย์ ทังสองขึน ้ ้ ้ ้ บนจอภาพอย่ างสวยงามดังตัวอย่ างข้ างล่ าง จากโปรแกรมที่กําหนดให้ จงเขียนโปรแกรมใหม่ โดยแบ่ ง ส่ วนของโปรแกรมต่ างๆ ออกเป็ นเมท็อดย่ อยให้ เหมาะสม (ประมาณ 5-6 เมท็อด) เพื่อให้ การทํางานของ โปรแกรมเป็ นสัดส่ วนยิ่งขึน แต่ ให้ คงไว้ ซ่ งการแสดงผลลัพธ์ ท่ เหมือนเดิมทุกประการ (40 คะแนน) ้ ึ ี © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 15. Methods - 08 Computer Programming using Java 107 Enter a[] size: 3 Enter member: 1 ระบุจํานวนสมาชิกของอาเรย์พร้ อมทังรับค่าสมาชิกแต่ละตัวของอาเรย์ ้ Enter member: 2 Enter member: 3 Enter b[] size: 3 Enter member: 2 ระบุจํานวนสมาชิกของอาเรย์พร้ อมทังรับค่าสมาชิกแต่ละตัวของอาเรย์ ้ Enter member: 1 Enter member: 3 Check array equals before sort: not equals ผลเปรี ยบเทียบการเท่ากันของอาเรย์ก่อนจัดเรี ยง Check array equals after sort: equals a[]: 1 2 3 ผลเปรี ยบเทียบการเท่ากันของอาเรย์หลังจัดเรี ยง b[]: 1 2 3 แสดงสมาชิกแต่ละตัวของอาเรย์ 1 import java.io.*; 2 import java.util.Scanner; 3 import jlab.graphics.DWindow; 4 public class OneMainOneMethod { 5 public static void main(String[] args) { 6 Scanner kb = new Scanner(System.in); 7 8 System.out.print("Enter a[] size: "); 9 int x = kb.nextInt(); 10 int a[] = new int[x]; 11 for (int i = 0; i < a.length; i++) { 12 System.out.print("Enter member: "); 13 a[i] = kb.nextInt(); 14 } 15 16 System.out.print("Enter b[] size: "); 17 int y = kb.nextInt(); 18 int b[] = new int[y]; 19 for (int i = 0; i < b.length; i++) { 20 System.out.print("Enter member: "); 21 b[i] = kb.nextInt(); 22 } 23 24 System.out.print("Check array equals before sort: "); 25 if (a.length == b.length) { 26 int count = 0; 27 for (int i = 0; i < a.length; i++) { 28 if (a[i] == b[i]) count++; 29 } 30 if (count == a.length) { 31 System.out.println("equals"); 32 } else { 33 System.out.println("not equals"); 34 } 35 } else { 36 System.out.println("not equals"); 37 } 38 39 for (int i = a.length - 1; i >= 1; i--) { 40 for (int j = 0; j < i; j++) { 41 if (a[j] > a[j + 1]) { 42 int t = a[j]; 43 a[j] = a[j + 1]; 44 a[j + 1] = t; 45 } 46 } 47 } © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 16. 108 Computer Programming using Java 08 - Methods 48 for (int i = b.length - 1; i >= 1; i--) { 49 for (int j = 0; j < i; j++) { 50 if (b[j] > b[j + 1]) { 51 int t = b[j]; 52 b[j] = b[j + 1]; 53 b[j + 1] = t; 54 } 55 } 56 } 57 58 System.out.print("Check array equals after sort: "); 59 if (a.length == b.length) { 60 int count = 0; 61 for (int i = 0; i < a.length; i++) { 62 if (a[i] == b[i]) count++; 63 } 64 if (count == a.length) { 65 System.out.println("equals"); 66 } else { 67 System.out.println("not equals"); 68 } 69 } else { 70 System.out.println("not equals"); 71 } 72 73 System.out.print("a[]: "); 74 for (int i = 0; i < a.length; i++) { 75 System.out.print(a[i] + " "); 76 } 77 System.out.println(); 78 79 System.out.print("b[]: "); 80 for (int i = 0; i < b.length; i++) { 81 System.out.print(b[i] + " "); 82 } 83 System.out.println(); 84 } //End of main 85 } //End of class เขียนโปรแกรมใหม่ โดยแบ่ งออกเป็ นเมท็อดย่ อย (ประมาณ 5-6 เมท็อด รวมเท็อด main(…) แล้ ว) โดย วิธีการแบ่ งเมท็อดย่ อยให้ พจารณาจากสัดส่ วนการทํางานย่ อยของโปรแกรมเดิม ิ import java.util.Scanner; public class OneMainManyMethods { คะแนนจะแปรผันไปตามโปรแกรมและเมท็อดที่ออกแบบ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 17. Methods - 08 Computer Programming using Java 109 } //End of class © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 18. 110 Computer Programming using Java 08 - Methods 4. เมท็อดหลายแบบในชื่อเดียวกัน (Overloading Methods) 1. นิยามของเมท็อดหลายแบบในชื่อเดียวกัน (Overloading Methods) คือ เมท็อดตังแต่ 2 เมท็อดใดๆ ขึ ้นไปที่มีชื่อเหมือนกันแต่มีรายการของพารามิเตอร์ ตางกัน ดังรายละเอียดต่อไปนี ้ ้ ่ 1) จํานวนพารามิเตอร์ ตางกัน เช่น ่ public static int test(int x) เมท็อด test ตัวที่หนึงมีพารามิเตอร์ 1 ตัว ่ public static int test(int x, int y) เมท็อด test ตัวที่สองมีพารามิเตอร์ 2 ตัว 2) ประเภทข้ อมูลของพารามิเตอร์ ตางกัน ่ public static int test(int x) เมท็อด test ตัวที่หนึงมีพารามิเตอร์ ประเภท int ่ public static int test(double x) เมท็อด test ตัวที่สองมีพารามิเตอร์ ประเภท double 2. ข้ อสังเกตเกี่ยวกับเมท็อดหลายแบบในชื่อเดียวกัน 1) เมท็อดแต่ละเมท็อดจะมีประเภทข้ อมูลที่สงกลับ (Return Type) ที่ตางกันหรื อเหมือนกันก็ได้ (ไม่ต้องไป ่ ่ สนใจ และไม่ใช่เป็ นประเด็นที่จะใช้ พิจารณาเมท็อดประเภทนี ้) 2) การเปรี ยบเทียบความเหมือนหรื อไม่เหมือนของพารามิเตอร์ ของแต่ละเมท็อด ให้ พิจารณาที่ประเภทข้ อมูล ของพารามิเตอร์ เท่านัน ไม่ได้ พิจารณาที่ชื่อของพารามิเตอร์ แต่อย่างใด (ต่างเมท็อดกันชื่อเหมือนกันได้ ) ้ 3) ระบบจะเลือกเมท็อดที่เหมาะสมที่สดเพียงเมท็อดเดียวขึ ้นมาใช้ งาน ถ้ าไม่มีเมท็อดใดเลยที่เหมาะสมจะ ุ แปลผลไม่ผาน (Compile-time Error) ่ โจทย์ ข้อที่ 14 [ระดับง่ าย] จงเลือกใช้ เมท็อดหลายแบบในชื่อเดียวกัน (Overloading Method) ที่เหมาะสม ที่สุดจากคําสั่งต่ อไปนี ้ พร้ อมทังแสดงผลลัพธ์ ท่ เกิดจากคําสั่งนัน (15 คะแนน) ้ ี ้ หมายเลขเมท็อด รายละเอียดของเมท็อด public static double m(int n) { 1 return n * n; } public static int m(double n) { 2 return (int)(n * n); } public static boolean m(int n, int x) { 3 return n == x; } public static double m(int a, int b, int c) { 4 return (double)(a * b * c); } public static int m(char c) { 5 return (int) c; } public static String m(double n, int x) { 6 return n + "" + x; } public static int m(double x, double n) { 7 return (int)(n * x); } © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 19. Methods - 08 Computer Programming using Java 111 ข้ อ คําสั่ง หมายเลขเมท็อด ผลลัพธ์ 1. System.out.println(m(10)); 2. System.out.println(m(1, 2.5)); 3. System.out.println(m(11.0)); 4. System.out.println(m(6.0f)); 5. System.out.println(m(12, 2)); 6. System.out.println(m('1')); 7. System.out.println(m(10.0, 2)); 8. System.out.println(m(2, 2, 1)); 9. System.out.println(m(m(5, 1, 2))); 10. System.out.println(m(m(5, 1.0f))); 11. System.out.println(m(1.0f, 2)); 12. System.out.println(m(0L, 1, 1)); 13. System.out.println(m(0.0f, (byte) 1)); 14. System.out.println(m((byte) 1.3, 1)); 15. System.out.println(m(1.1)); โจทย์ ข้อที่ 15 [ระดับง่ าย] จงเขียนเมท็อดหลายแบบในชื่อเดียวกัน (Overloading Method) ตามข้ อกํา- หนดต่ อไปนี ้ พร้ อมทังเรี ยกใช้ งานเมท็อดเหล่ านีให้ ถูกต้ องสมบรณ์ (15 คะแนน) ้ ้ ู import java.util.Scanner; public class Overload { //เมท็อด main(…) เพื่อเรี ยกใช้ เมท็อด showName(…) ทุกตัวให้ ครบสมบรณ์ และกําหนดค่ าพารามิ- ู เตอร์ ได้ อย่ างอิสระ (3 คะแนน) public static void main(String[] args) { } //End of main © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 20. 112 Computer Programming using Java 08 - Methods //เมท็อด showName(…) แบบที่ไม่ มีพารามิเตอร์ เพื่อใช้ แสดงชื่อของนิสิตขึนบนจอภาพ (3 คะแนน) ้ //เมท็อด showName(…) แบบที่มีพารามิเตอร์ 1 ตัวที่รับชื่อนิสิตชื่อใดๆ เข้ ามาเพื่อใช้ แสดงชื่อของ นิสิตคนนันขึนบนจอภาพ (3 คะแนน) ้ ้ //เมท็อด showName(…) แบบที่มีพารามิเตอร์ 2 ตัวที่รับคํานําหน้ าชื่อและชื่อนิสิตชื่อใดๆ เข้ ามาเพื่อ ใช้ แสดงคํานําหน้ าชื่อตามด้ วยชื่อของนิสิตคนนันขึนบนจอภาพ (3 คะแนน) ้ ้ //เมท็อด showName(…) แบบที่มีพารามิเตอร์ 2 ตัวที่รับชื่อนิสิตชื่อใดๆ และจํานวนเต็ม x อีกหนึ่งค่ า เพื่อใช้ แสดงชื่อของนิสิตคนนันจํานวน x ครังขึนบนจอภาพ (3 คะแนน) ้ ้ ้ } //End of class © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้