java-chapter 08 methods

20

Click here to load reader

Upload: wongyos-keardsri

Post on 20-May-2015

1.816 views

Category:

Documents


0 download

DESCRIPTION

Chapter 08 Methods

TRANSCRIPT

Page 1: Java-Chapter 08 Methods

93

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

Computer Programming using Java Methods - 08

1 คลาส หลายเมทอด 1 คลาส 1 เมทอด (เมทอด main)

CHAPTER 08

class Operation { } //End of class

class Operation { } //End of class

เมทอด

(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 จะไมประมวลผล)

4) ตวอยางของโปรแกรมแบบ 1 คลาส หลายเมทอด

main(...) { //add //sub }

main(...) { add() sub() ... }

add(...) { }

sub(...) { }

ทางานแบบ

ตามลาดบ

จากบนลงลาง ทางานแบบ

แยกสวนยอย

กระโดดไปมา

2

5

4

7

คนคา

ใชงาน สงคา

ทางาน

3

รบ

1

เรยก

6

รบ

1 2 3 4 5 6 7 8 9

1

เรมตน

สนสด

2

public class Example { public static void main(String[] args) { int n = add(4, 10); System.out.println(n); }

public static int add(int x, int y) { return x + y; }

}

1 เรยก add(4, 10) 2 สงคา 4 กบ 10

3 รบ add(int x, int y)

4 ทางาน 4 + 10

5 คนคา return 14

7 ใชงาน System.out.println(n) 6 รบ int n = 14

Page 2: Java-Chapter 08 Methods

94

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

Computer Programming using Java 08 - Methods

โจทยขอท 1 [ระดบงาย] จากตวอยางโปรแกรมตอไปน จงพจารณาคากลาวแตละขอวากลาวผด ( ) หรอถก ( ) (20 คะแนน)

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner kb = new Scanner(System.in);

double a = kb.nextDouble(); int b = kb.nextInt(); double n = mul(a, b); int m = mod(13); System.out.println(n + m); } private static double mul(double x, int y) { double n = x * y; return n; } protected static int mod(int x) { return x % 3; } }

ตงใจจะใสคา 5.0

ตงใจจะใสคา 2

บางเมทอดอาจเขยนอยในรปแบบอนทไมใช public

static กได เชน private static เปนตน ซง

จะไดกลาวรายละเอยดอกครงในบทท 12

Page 3: Java-Chapter 08 Methods

95

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

Computer Programming using Java Methods - 08

2. โครงสรางของเมทอดและการเขยนเมทอด (Method Structure and Creating Method)

1. โครงสรางโดยรวมของเมทอด สามารถแบงออกเปน 2 สวนหลกไดแก หวเมทอดและตวเมทอด ดงตวอยาง

จากตวอยางสามารถแจกแจงสวนประกอบยอยของเมทอดออกเปน 6 สวนดงตอไปน

2. หวเมทอด (Head) เปนสวนทแสดงถงรปแบบ โครงสรางและขอกาหนดของเมทอด ซงมสวนประกอบดงตอไปน

1) ตวบงคณลกษณะ (Modifier) คอ สวนทกาหนดคณลกษณะและคณสมบตบางประการของเมทอด ซง

ไดแก public, private, protected, static ฯลฯ โดยจะอธบายอกครงในเรองคลาสและออบเจค แต

ในบทนใหเขยนตวบงคณลกษณะของทกเมทอดเปนแบบ public static เทานน ดงตวอยาง

2) ประเภทเมทอด (Method Type) หรอประเภทขอมลทสงกลบ (Return Type) คอ ประเภทขอมลท

เปนผลลพธสดทายของเมทอดทจะคนคากลบ ซงไดแกประเภทขอมล byte, short, int, long, float,

double ฯลฯ หากเมทอดไมมการคนคากลบใหระบเปนประเภท void ดงตวอยาง

ในกรณทประเภทขอมลทสงกลบมโครงสรางขอมลเปนแบบอาเรย ใหระบเครองหมายวงเลบเหลยม

(Brackets) ตอทายประเภทเมทอดนนดวย ดงตวอยาง

คนคาออกไป รบคาเขามา

public static double add(int x, int y) { double cal = x + y; return cal; }

หวเมทอด

ตวเมทอด ประมวลผล

คนคา

ทางเขา ทางออก

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

<ตวบงคณลกษณะ> <ประเภท> <ชอ> (<ตวแปรรบเขา>) {

<คาสงประมวลผล> ...

<คาสงสงกลบขอมล>

} .

1 2 3 4

5

6

ไมวาภายในเมทอดจะมกคาสงกตามจะ

ตองใสเครองหมายปกกาเปด-ปดเสมอ

สวนประกอบท 1-4 คอ หวเมทอด (Head)

สวนประกอบท 5-6 คอ ตวเมทอด (Body)

private static int[] sort(int x[])

ถาเปนอาเรยสองมตใหระบเปน int[][]

public static double power(double n) สวนนมกไดไมมกได ตดออกได

ในกรณทคนคามากกวา 1 คาจะตองอยในรปอาเรย

ขอมลจากทางเขาและขอมลท

ทางออกไมไดสมพนธกน

Page 4: Java-Chapter 08 Methods

96

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

Computer Programming using Java 08 - Methods

3) ชอเมทอด (Method Name) คอ ชอทอางถงหรอชอเรยกเมทอด ซงควรขนตนดวยอกษรตวพมพเลก

(เปนไปตามกฎการตงชอตวแปร) และชอควรเปนคากรยาหรอคาทแสดงการกระทา เชน getID(…),

addNumber(…) เปนตน และหลงชอเมทอดตองตามดวยเครองหมายวงเลบเปด-ปดเสมอ ดงตวอยาง

4) ตวแปรรบเขา (Parameters) คอ คาหรอตวแปรทรบเขามายงเมทอดเพอใชประมวลผลภายในเมทอด ซง

ตวแปรรบเขาของเมทอดหนงๆ จะมหรอไมมกได ถามจะมกตวกได ถามหลายตวแตละตวตองคนดวย

เครองหมายจลภาค (Comma) และทกตวตองมประเภทขอมลกากบเสมอ เชน set(int a, int b)

หามเขยนเปน set(int a, b) โดยเดดขาด ดงตวอยาง

ในกรณทพารามเตอรมโครงสรางขอมลเปนแบบอาเรย ใหระบเครองหมายวงเลบเหลยมไวขางหนาหรอ

ตอทายชอพารามเตอรนนดวย ดงตวอยาง

โจทยขอท 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

public static double add (int x, int y)

public double mul(int x, double y, int z)

คลายกบการประกาศตวแปร

สวนนตองมเสมอ ตดออกไมได

สวนนมกไดไมมกได ตดออกได

public static int find(int x, int y[][]) มพารามเตอรทเปนอาเรยสองมต

Page 5: Java-Chapter 08 Methods

97

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

Computer Programming using Java Methods - 08

3. ตวเมทอด (Body) เปนสวนทแสดงรายละเอยดของการประมวลผลและการสงกลบขอมลของเมทอด ซงมดงตอไปน

1) การประมวลผล ซงไดแกการประกาศตวแปรเพอใชภายในเมทอด และการใชคาสงตางๆ เชน if-else,

while, for, Scanner ในการประมวลผลภายในเมทอด ซงหลกการเหลานจะเหมอนกบเนอหากอนหนา

นตงแตบทท 1-7 ทไดเรยนมาแลวทกประการ

2) การสงกลบขอมล เปนการสงคาหรอคนคาคาตอบทไดจากการประมวลผลในเมทอดกลบไปยงเมทอดท

เรยกใช ซงคาทสงกลบ (Return Value) จะตองตรงกบประเภทเมทอด (Method Type) หรอ ประเภทขอมล

ทสงกลบ (Return Type) ทประกาศไวทหวเมทอดเสมอ หรอถาไมตรงกนจะตองสามารถสอดใสกนได ซง

การสงกลบจะใชคาสง return และสามารถทาไดเพยงครงเดยวเทานน ถามคาสง return หลายกรณจะ

ทาเพยงกรณแรกทเปนจรง แตถาประเภทเมทอดเปน void ไมตองมคาสง return ดงตวอยาง

3) การสงกลบขอมลแบบหลายคา ถาเมทอดประมวลผลแลวไดผลลพธทเปนคาตอบสดทายมากกวา 1 คา

จะตองสงคากลบโดยใชอาเรย (หนงมต) โดยการเกบคาคาตอบทกคาไวในอาเรยแลวคนคาของอาเรยนน

เพยงคาเดยวกลบไปยงเมทอดทเรยกใช ซงจะทาใหไดผลคาตอบทกคาคนกลบมาดวย ดงตวอยาง

โจทยขอท 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; }

1 2 3 4 5 6

1 2 3 4

public static double div(int a, int b){ double x = (double) a / (double) b; return x; }

public static int[] findFirstLast(int a[]) { int x[] = new int[2]; x[0] = a[0]; x[1] = a[a.length – 1]; return x; }

ประเภทขอมลทสงกลบทหวเมทอดตองเปนอาเรย

เมทอดเปนประเภท double

คาทจะสงกลบ (คาของตวแปร x) จะตองมประเภทขอมลเปน double

การสงกลบขอมลแบบอาเรยจะเขยนเฉพาะชอของอาเรย

โดยไมตองใสเครองหมายวงเลบเหลยม

Page 6: Java-Chapter 08 Methods

98

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

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 คะแนน)

Page 7: Java-Chapter 08 Methods

99

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

Computer Programming using Java Methods - 08

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 คะแนน)

Page 8: Java-Chapter 08 Methods

100

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

Computer Programming using Java 08 - Methods

โจทยขอท 8 [ระดบปานกลาง] จงเขยนเมทอด isPrime(…)ทสมบรณเพอใชตรวจสอบตวเลขจานวนเตมทรบเขามาทางพารามเตอรวาเปนจานวนเฉพาะหรอไม (10 คะแนน)

โจทยขอท 9 [ระดบปานกลาง] จงเขยนเมทอด memberOfArray(…) ทสมบรณเพอ คนหาลาดบของสมา-ชกตวแรกในอาเรยหนงมตชอ a ทมคาเทากบจานวนเตม x ถาคนเจอมากกวา 1 จานวนใหคนคาเพยงสมาชกตวแรกทคนเจอโดยเรมจากตวซายสด แตถาคนไมเจอใหคนคา -1 (10 คะแนน)

Page 9: Java-Chapter 08 Methods

101

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

Computer Programming using Java Methods - 08

โจทยขอท 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) เมทอดผถกเรยก ทาหนาทเปนผ ทใหเมทอดอนมาเรยกใชตวมน

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);

1 2 3 4 5 6

public static void main(String[] args) { int n = add(5, 3); } public static int add(int x, int y) { return x + y; }

เมทอด main เปนผ เรยก

(เรยกใชเมทอด add)

เมทอด add เปนผถกเรยก (ถกเรยกใชโดยเมทอด main)

Page 10: Java-Chapter 08 Methods

102

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

Computer Programming using Java 08 - Methods

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)

โจทยขอท 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)

1 2 3 4 5 6 7 8 9 10 11

public static void main(String[] args) { String s = getName(53300121); System.out.println(s); showName(53300121);

} public static String getName(int id) { return "Wongyos"; } public static void showName(int id) { System.out.println("Wongyos"); }

เมทอด main เรยกใชเมทอด

getName โดยสงพารามเตอร

ประเภท int ไปประมวลผลและสราง

ตวแปร s เพอรบคาตอบทคนกลบมา

เมทอด main เรยกใชเมทอด showName

แบบโดดๆ โดยสงพารามเตอรประเภท int

ไปประมวลผล ซงไมมการคนคากลบ

1 2 3 4 5 6 7

public static void main(String[] args) { int x = 5, y = 3; int n = add(x, y); } public static int add(int x, int y) { return x + y; }

การเรยกใชเมทอด ใสคาพารามเตอรโดยไมตองระบประเภทขอมล

การประกาศและสรางเมทอด ใสชอพา-

รามเตอรและระบประเภทขอมล

ตวแปร x และ y ในเมทอด main จะเปนคนละตว กบตวแปร x และ y ในเมทอด add

Page 11: Java-Chapter 08 Methods

103

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

Computer Programming using Java Methods - 08

ตวอยางการเรยกใชเมทอดพรอมทงการแสดงผล

ขอ หวเมทอด เขยนคาสงเพอเรยกใชงานเมทอด

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

Page 12: Java-Chapter 08 Methods

104

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

Computer Programming using Java 08 - Methods

//[ระดบปานกลาง] เมทอด swap(…) ใชในการสลบคาสมาชกในอาเรยตามตาแหนง i และ j ทระบ เชนคาสง swap(a, i, j) คอการสลบคาสมาชกตาแหนงท i และ j ของอาเรย a เปนตน โดยไมตองคนคากลบ (5 คะแนน)

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

//[ระดบปานกลาง] เมทอด count(…) ใชนบจานวนสมาชกในอาเรยทมคาเทากบจานวนเตม k ทระ-บ (นบความถ) แลวคนคาจานวนทนบได (10 คะแนน)

Page 13: Java-Chapter 08 Methods

105

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

Computer Programming using Java Methods - 08

//[ระดบยาก] เมทอด mode(…) ใชหาคาฐานนยม โดยจะคนคาสมาชกในอาเรยทมคาความถสงสด หรอปรากฎจานวนครงมากทสด ถามหลายคาใหคนคาใดกไดเพยงคาเดยว (10 คะแนน)

//[ระดบยาก] เมทอด majority(…) ใชหาคาหมมาก โดยจะคนคาสมาชกในอาเรยทมคาความถมาก กวาครงหนงของจานวนสมาชกทงหมด ถาหาไมไดใหคนคา -1 (10 คะแนน)

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

Page 14: Java-Chapter 08 Methods

106

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

Computer Programming using Java 08 - Methods

//[ระดบงาย] เมทอด max(…) ใชหาคาสงสดของ สมาชกในอาเรย พรอมทงคนคากลบ (5 คะแนน)

//[ระดบงาย] เมทอด min(…) ใชหาคาตาสดของสมาชกในอาเรย พรอมทงคนคากลบ (5 คะแนน)

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

} //End of class

โจทยขอท 13 [ระดบยาก] โปรแกรมตอไปนเปนโปรแกรมทเขยนคาสงทกคาสงไวในเมทอด main(…) เพยงเมทอดเดยว โดยโปรแกรมนใชสาหรบสรางอาเรย 1 มตประเภทจานวนเตม 2 ตว พรอมทงรบคาสมาชกผานทางแปนพมพเกบไวในอาเรยแตละชองจนครบสมบรณ หลงจากนนทาการตรวจสอบการเทากนของอาเรยทงสองวาเทากนหรอไมพรอมทงแสดงผลลพธขนบนจอภาพ จากนนทาการจดเรยงขอมลจากนอยไปหามากของอาเรยทงสองแลวตรวจสอบการเทากนของอาเรยอกครงหนงวาเทากนหรอไมพรอมทงแสดงผลลพธขนบนจอภาพ สดทายทาการแสดงสมาชกแตละตวของอาเรยทงสองขนบนจอภาพอยางสวยงามดงตวอยางขางลาง จากโปรแกรมทกาหนดใหจงเขยนโปรแกรมใหมโดยแบงสวนของโปรแกรมตางๆ ออกเปนเมทอดยอยใหเหมาะสม (ประมาณ 5-6 เมทอด) เพอใหการทางานของโปรแกรมเปนสดสวนยงขน แตใหคงไวซงการแสดงผลลพธทเหมอนเดมทกประการ (40 คะแนน)

Page 15: Java-Chapter 08 Methods

107

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

Computer Programming using Java Methods - 08

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

import java.io.*; import java.util.Scanner; import jlab.graphics.DWindow; public class OneMainOneMethod {

public static void main(String[] args) { Scanner kb = new Scanner(System.in); System.out.print("Enter a[] size: "); int x = kb.nextInt(); int a[] = new int[x]; for (int i = 0; i < a.length; i++) { System.out.print("Enter member: "); a[i] = kb.nextInt(); } System.out.print("Enter b[] size: "); int y = kb.nextInt(); int b[] = new int[y]; for (int i = 0; i < b.length; i++) { System.out.print("Enter member: "); b[i] = kb.nextInt(); } System.out.print("Check array equals before sort: "); if (a.length == b.length) { int count = 0; for (int i = 0; i < a.length; i++) { if (a[i] == b[i]) count++; } if (count == a.length) { System.out.println("equals"); } else { System.out.println("not equals"); } } else { System.out.println("not equals"); } for (int i = a.length - 1; i >= 1; i--) { for (int j = 0; j < i; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } }

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

ระบจานวนสมาชกของอาเรยพรอมทงรบคาสมาชกแตละตวของอาเรย

ระบจานวนสมาชกของอาเรยพรอมทงรบคาสมาชกแตละตวของอาเรย

ผลเปรยบเทยบการเทากนของอาเรยกอนจดเรยง

ผลเปรยบเทยบการเทากนของอาเรยหลงจดเรยง แสดงสมาชกแตละตวของอาเรย

Page 16: Java-Chapter 08 Methods

108

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

Computer Programming using Java 08 - Methods

เขยนโปรแกรมใหมโดยแบงออกเปนเมทอดยอย (ประมาณ 5-6 เมทอด รวมเทอด main(…) แลว) โดยวธการแบงเมทอดยอยใหพจารณาจากสดสวนการทางานยอยของโปรแกรมเดม import java.util.Scanner; public class OneMainManyMethods {

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

for (int i = b.length - 1; i >= 1; i--) { for (int j = 0; j < i; j++) { if (b[j] > b[j + 1]) { int t = b[j]; b[j] = b[j + 1]; b[j + 1] = t; } } } System.out.print("Check array equals after sort: "); if (a.length == b.length) { int count = 0; for (int i = 0; i < a.length; i++) { if (a[i] == b[i]) count++; } if (count == a.length) { System.out.println("equals"); } else { System.out.println("not equals"); } } else { System.out.println("not equals"); } System.out.print("a[]: "); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); System.out.print("b[]: "); for (int i = 0; i < b.length; i++) { System.out.print(b[i] + " "); } System.out.println(); } //End of main } //End of class

คะแนนจะแปรผนไปตามโปรแกรมและเมทอดทออกแบบ

Page 17: Java-Chapter 08 Methods

109

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

Computer Programming using Java Methods - 08

} //End of class

Page 18: Java-Chapter 08 Methods

110

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

Computer Programming using Java 08 - Methods

4. เมทอดหลายแบบในชอเดยวกน (Overloading Methods)

1. นยามของเมทอดหลายแบบในชอเดยวกน (Overloading Methods) คอ เมทอดตงแต 2 เมทอดใดๆ ขนไปทมชอเหมอนกนแตมรายการของพารามเตอรตางกน ดงรายละเอยดตอไปน

1) จานวนพารามเตอรตางกน เชน

2) ประเภทขอมลของพารามเตอรตางกน

2. ขอสงเกตเกยวกบเมทอดหลายแบบในชอเดยวกน 1) เมทอดแตละเมทอดจะมประเภทขอมลทสงกลบ (Return Type) ทตางกนหรอเหมอนกนกได (ไมตองไป

สนใจ และไมใชเปนประเดนทจะใชพจารณาเมทอดประเภทน)

2) การเปรยบเทยบความเหมอนหรอไมเหมอนของพารามเตอรของแตละเมทอด ใหพจารณาทประเภทขอมล

ของพารามเตอรเทานน ไมไดพจารณาทชอของพารามเตอรแตอยางใด (ตางเมทอดกนชอเหมอนกนได)

3) ระบบจะเลอกเมทอดทเหมาะสมทสดเพยงเมทอดเดยวขนมาใชงาน ถาไมมเมทอดใดเลยทเหมาะสมจะ

แปลผลไมผาน (Compile-time Error)

โจทยขอท 14 [ระดบงาย] จงเลอกใชเมทอดหลายแบบในชอเดยวกน (Overloading Method) ทเหมาะสมทสดจากคาสงตอไปน พรอมทงแสดงผลลพธทเกดจากคาสงนน (15 คะแนน)

หมายเลขเมทอด รายละเอยดของเมทอด

1 public static double m(int n) { return n * n;

}

2 public static int m(double n) { return (int)(n * n); }

3 public static boolean m(int n, int x) { return n == x; }

4 public static double m(int a, int b, int c) { return (double)(a * b * c);

}

5 public static int m(char c) { return (int) c;

}

6 public static String m(double n, int x) { return n + "" + x;

}

7 public static int m(double x, double n) { return (int)(n * x);

}

public static int test(int x) public static int test(int x, int y)

public static int test(int x) public static int test(double x)

เมทอด test ตวทหนงมพารามเตอร 1 ตว

เมทอด test ตวทสองมพารามเตอร 2 ตว

เมทอด test ตวทหนงมพารามเตอรประเภท int

เมทอด test ตวทสองมพารามเตอรประเภท double

Page 19: Java-Chapter 08 Methods

111

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

Computer Programming using Java Methods - 08

ขอ คาสง หมายเลขเมทอด ผลลพธ

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

Page 20: Java-Chapter 08 Methods

112

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

Computer Programming using Java 08 - Methods

//เมทอด showName(…) แบบทไมมพารามเตอรเพอใชแสดงชอของนสตขนบนจอภาพ (3 คะแนน)

//เมทอด showName(…) แบบทมพารามเตอร 1 ตวทรบชอนสตชอใดๆ เขามาเพอใชแสดงชอของนสตคนนนขนบนจอภาพ (3 คะแนน)

//เมทอด showName(…) แบบทมพารามเตอร 2 ตวทรบคานาหนาชอและชอนสตชอใดๆ เขามาเพอใชแสดงคานาหนาชอตามดวยชอของนสตคนนนขนบนจอภาพ (3 คะแนน)

//เมทอด showName(…) แบบทมพารามเตอร 2 ตวทรบชอนสตชอใดๆ และจานวนเตม x อกหนงคา เพอใชแสดงชอของนสตคนนนจานวน x ครงขนบนจอภาพ (3 คะแนน)

} //End of class