chap07

72
Java Programming: From Problem Analysis to Program Design, 3e Chapter 7 User-Defined Methods

Upload: terry-yoast

Post on 20-May-2015

490 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Chap07

Java Programming: From Problem Analysis to Program Design, 3e

Chapter 7

User-Defined Methods

Page 2: Chap07

2Java Programming: From Problem Analysis to Program Design, 3e

Chapter Objectives

• Understand how methods are used in Java programming

• Learn about standard (predefined) methods and discover how to use them in a program

• Learn about user-defined methods

• Examine value-returning methods, including actual and formal parameters

Page 3: Chap07

3Java Programming: From Problem Analysis to Program Design, 3e

Chapter Objectives (continued)

• Explore how to construct and use a value-returning, user-defined method in a program

• Learn how to construct and use user-defined void methods in a program

• Explore variables as parameters

• Learn about the scope of an identifier

• Become aware of method overloading

Page 4: Chap07

4Java Programming: From Problem Analysis to Program Design, 3e

Predefined Classes

• Methods already written and provided by Java

• Organized as a collection of classes (class libraries)

• To use: import package

• Method type: data type of value returned by method

Page 5: Chap07

5Java Programming: From Problem Analysis to Program Design, 3e

Predefined Classes (continued)

Page 6: Chap07

6Java Programming: From Problem Analysis to Program Design, 3e

Predefined Classes (continued)

Page 7: Chap07

7Java Programming: From Problem Analysis to Program Design, 3e

Predefined Classes (continued)

Page 8: Chap07

8Java Programming: From Problem Analysis to Program Design, 3e

Predefined Classes (continued)

Page 9: Chap07

9Java Programming: From Problem Analysis to Program Design, 3e

class Character (Package: java.lang)

Page 10: Chap07

10Java Programming: From Problem Analysis to Program Design, 3e

class Character (Package: java.lang) (continued)

Page 11: Chap07

11Java Programming: From Problem Analysis to Program Design, 3e

class Character (Package: java.lang) (continued)

Page 12: Chap07

12Java Programming: From Problem Analysis to Program Design, 3e

Syntax: Value-Returning Method

Page 13: Chap07

13Java Programming: From Problem Analysis to Program Design, 3e

User-Defined Methods

• Value-returning methods– Used in expressions– Calculate and return a value– Can save value for later calculation or print value

• modifiers: public, private, protected, static, abstract, final

• returnType: type of the value that the method calculates and returns (using return statement)

• methodName: Java identifier; name of method

Page 14: Chap07

14Java Programming: From Problem Analysis to Program Design, 3e

Syntax

• Syntax: Formal Parameter List-The syntax of the formal parameter list is:

• Method Call-The syntax to call a value-returning method is:

Page 15: Chap07

15Java Programming: From Problem Analysis to Program Design, 3e

Syntax (continued)

• Syntax: return Statement -The return statement has the following syntax:

return expr;

• Syntax: Actual Parameter List-The syntax of the actual parameter list is:

Page 16: Chap07

16Java Programming: From Problem Analysis to Program Design, 3e

Equivalent Method Definitions

public static double larger(double x, double y){ double max;

if (x >= y) max = x; else max = y;

return max;}

Page 17: Chap07

17Java Programming: From Problem Analysis to Program Design, 3e

Equivalent Method Definitions (continued)

public static double larger(double x, double y){ if (x >= y) return x; else return y;}

Page 18: Chap07

18Java Programming: From Problem Analysis to Program Design, 3e

Equivalent Method Definitions (continued)

public static double larger(double x, double y){ if (x >= y) return x; return y;}

Page 19: Chap07

19Java Programming: From Problem Analysis to Program Design, 3e

Programming Example: Palindrome Number

• Palindrome: integer or string that reads the same forwards and backwards

• Input: integer or string

• Output: Boolean message indicating whether integer string is a palindrome

Page 20: Chap07

20Java Programming: From Problem Analysis to Program Design, 3e

Solution: isPalindrome Method

public static boolean isPalindrome(String str){ int len = str.length(); int i, j; j = len - 1;

for (i = 0; i <= (len - 1) / 2; i++) { if (str.charAt(i) != str.charAt(j)) return false; j--; } return true; }

Page 21: Chap07

21Java Programming: From Problem Analysis to Program Design, 3e

Sample Runs: Palindrome Number

Page 22: Chap07

22Java Programming: From Problem Analysis to Program Design, 3e

Sample Runs: Palindrome Number (continued)

Page 23: Chap07

23Java Programming: From Problem Analysis to Program Design, 3e

Flow of Execution• Execution always begins with the first statement

in the method main• User-defined methods execute only when called

• Call to method transfers control from caller to called method

• In method call statement, specify only actual parameters, not data type or method type

• Control goes back to caller when method exits

Page 24: Chap07

24Java Programming: From Problem Analysis to Program Design, 3e

Programming Example: Largest Number

• Input: set of 10 numbers

• Output: largest of 10 numbers

• Solution– Get numbers one at a time– Method largest number: returns the larger of 2

numbers– For loop: calls method largest number on each number

received and compares to current largest number

Page 25: Chap07

25Java Programming: From Problem Analysis to Program Design, 3e

Solution: Largest Numberstatic Scanner console = new Scanner(System.in);

public static void main(String[] args){ double num; double max; int count; System.out.println("Enter 10 numbers."); num = console.nextDouble(); max = num; for (count = 1; count < 10; count++) { num = console.nextDouble(); max = larger(max, num); } System.out.println("The largest number is " + max); }

Page 26: Chap07

26Java Programming: From Problem Analysis to Program Design, 3e

Sample Run: Largest Number

• Sample Run:

Enter 10 numbers:10.5 56.34 73.3 42 22 67 88.55 26 62 11The largest number is 88.55

Page 27: Chap07

27Java Programming: From Problem Analysis to Program Design, 3e

Void Methods

• Similar in structure to value-returning methods

• Call to method is always stand-alone statement

• Can use return statement to exit method early

Page 28: Chap07

28Java Programming: From Problem Analysis to Program Design, 3e

Void Methods: Syntax

• Method Definition-The general form (syntax) of a void method without parameters is as follows:

modifier(s) void methodName(){ statements}• Method Call (Within the Class)

-The method call has the following syntax:methodName();

Page 29: Chap07

29Java Programming: From Problem Analysis to Program Design, 3e

Void Methods with Parameters: Syntax

Page 30: Chap07

30Java Programming: From Problem Analysis to Program Design, 3e

Void Methods with Parameters: Syntax (continued)

Page 31: Chap07

31Java Programming: From Problem Analysis to Program Design, 3e

Primitive Data Type Variables as Parameters

• A formal parameter receives a copy of its corresponding actual parameter

• If a formal parameter is a variable of a primitive data type:– Value of actual parameter is directly stored– Cannot pass information outside the method– Provides only a one-way link between actual

parameters and formal parameters

Page 32: Chap07

32Java Programming: From Problem Analysis to Program Design, 3e

Reference Variables as Parameters

• If a formal parameter is a reference variable:– Copies value of corresponding actual parameter– Value of actual parameter is address of the object

where actual data is stored– Both formal and actual parameter refer to same

object

Page 33: Chap07

33Java Programming: From Problem Analysis to Program Design, 3e

Uses of Reference Variables as Parameters

• Can return more than one value from a method

• Can change the value of the actual object

• When passing address, would save memory space and time, relative to copying large amount of data

Page 34: Chap07

34Java Programming: From Problem Analysis to Program Design, 3e

Reference Variables as Parameters: type String

Page 35: Chap07

35Java Programming: From Problem Analysis to Program Design, 3e

Example 7-11public class Example7_11{ public static void main(String[] args) { int num1; //Line 1 IntClass num2 = new IntClass(); //Line 2 char ch; //Line 3 StringBuffer str; //Line 4 num1 = 10; //Line 5 num2.setNum(15); //Line 6 ch = 'A'; //Line 7 str = new StringBuffer("Sunny"); //Line 8 System.out.println("Line 9: Inside main: " + "num1 = " + num1 + ", num2 = "

+ num2.getNum() + ", ch = " + ch + ", and str = " + str); //Line 9

Reference Variables as Parameters: type String (continued)

Page 36: Chap07

36Java Programming: From Problem Analysis to Program Design, 3e

funcOne(num1, num2, ch, str); //Line 10 System.out.println("Line 11: After funcOne: " + "num1 = " + num1 + ", num2 = "

+ num2.getNum() + ", ch = " + ch + ", and str = " + str); //Line 11 }

Reference Variables as Parameters: type String (continued)

Page 37: Chap07

37Java Programming: From Problem Analysis to Program Design, 3e

public static void funcOne(int a, IntClass b, char v,

StringBuffer pStr) { int num; //Line 12 int len; //Line 13 num = b.getNum(); //Line 14 a++; //Line 15 b.addToNum(12); //Line 16 v = 'B'; //Line 17 len = pStr.length(); //Line 18 pStr.delete(0, len); //Line 19 pStr.append("Warm"); //Line 20 System.out.println("Line 21: Inside funcOne: \n" + " a = " + a + ", b = " + b.getNum() + ", v = " + v + ", pStr = " + pStr + ", len = " + len + ", and num = " + num); //Line 21 }}

Reference Variables as Parameters: type String (continued)

Page 38: Chap07

38Java Programming: From Problem Analysis to Program Design, 3e

Reference Variables as Parameters: type String (continued)

Page 39: Chap07

39Java Programming: From Problem Analysis to Program Design, 3e

num1 = 10; //Line 5 num2.setNum(15); //Line 6 ch = 'A';

//Line 7str = new StringBuffer("Sunny"); //Line 8

Reference Variables as Parameters: type String (continued)

Page 40: Chap07

40Java Programming: From Problem Analysis to Program Design, 3e

System.out.println("Line 9: Inside main: " + "num1 = " + num1 + ", num2 = " + num2.getNum() + ", ch = " + ch + ", and str = " + str); //Line 9

Reference Variables as Parameters: type String (continued)

Page 41: Chap07

41Java Programming: From Problem Analysis to Program Design, 3e

int num; //Line 12 int len; //Line 13 num = b.getNum();

//Line 14

Reference Variables as Parameters: type String (continued)

Page 42: Chap07

42Java Programming: From Problem Analysis to Program Design, 3e

num = b.getNum(); //Line 14

Reference Variables as Parameters: type String (continued)

Page 43: Chap07

43Java Programming: From Problem Analysis to Program Design, 3e

a++; //Line 15

Reference Variables as Parameters: type String (continued)

Page 44: Chap07

44Java Programming: From Problem Analysis to Program Design, 3e

b.addToNum(12); //Line 16

Reference Variables as Parameters: type String (continued)

Page 45: Chap07

45Java Programming: From Problem Analysis to Program Design, 3e

v = 'B'; //Line 17

Reference Variables as Parameters: type String (continued)

Page 46: Chap07

46Java Programming: From Problem Analysis to Program Design, 3e

len = pStr.length(); //Line 18

Reference Variables as Parameters: type String (continued)

Page 47: Chap07

47Java Programming: From Problem Analysis to Program Design, 3e

pStr.delete(0, len); //Line 19

Reference Variables as Parameters: type String (continued)

Page 48: Chap07

48Java Programming: From Problem Analysis to Program Design, 3e

pStr.append("Warm"); //Line 20

Reference Variables as Parameters: type String (continued)

Page 49: Chap07

49Java Programming: From Problem Analysis to Program Design, 3e

System.out.println("Line 21: Inside funcOne: \n" + " a = " + a + ", b = " + b.getNum() + ", v = " + v + ", pStr = " + pStr + ", len = " + len + ", and num = " + num); //Line 21

Reference Variables as Parameters: type String (continued)

Page 50: Chap07

50Java Programming: From Problem Analysis to Program Design, 3e

Reference Variables as Parameters: type String (continued)

Page 51: Chap07

51Java Programming: From Problem Analysis to Program Design, 3e

System.out.println("Line 11: After funcOne: " + "num1 = " + num1 + ", num2 = " + num2.getNum() + ", ch = " + ch + ", and str = " + str); //Line 11

Reference Variables as Parameters: type String (continued)

Page 52: Chap07

52Java Programming: From Problem Analysis to Program Design, 3e

Scope of an Identifier Within a Class

• Local identifier: Identifier declared within a method or block, which is visible only within that method or block

• Java does not allow the nesting of methods; you cannot include the definition of one method in the body of another method

• Within a method or a block, an identifier must be declared before it can be used; a block is a set of statements enclosed within braces

Page 53: Chap07

Scope of an Identifier Within a Class (continued)

• A method’s definition can contain several blocks – The body of a loop or an if statement also

form a block• Within a class, outside of every method

definition, (and every block), an identifier can be declared anywhere

Java Programming: From Problem Analysis to Program Design, 3e 53

Page 54: Chap07

Scope of an Identifier Within a Class (continued)

• Within a method, an identifier used to name a variable in the outer block of the method cannot be used to name any other variable in an inner block of the method

• For example, in the method definition on the next slide, the second declaration of the variable x is illegal

Java Programming: From Problem Analysis to Program Design, 3e 54

Page 55: Chap07

55Java Programming: From Problem Analysis to Program Design, 3e

Scope of an Identifier Within a Class (continued)

public static void illegalIdentifierDeclaration(){ int x; //block { double x; //illegal declaration, //x is already declared ... }}

Page 56: Chap07

56Java Programming: From Problem Analysis to Program Design, 3e

Scope Rules

• Scope rules of an identifier declared within a class and accessed within a method (block) of the class

• An identifier, say X, declared within a method (block) is accessible:– Only within the block from the point at which it is

declared until the end of the block– By those blocks that are nested within that block

Page 57: Chap07

Scope Rules (continued)

• Suppose X is an identifier declared within a class and outside of every method’s definition (block) – If X is declared without the reserved word static (such

as a named constant or a method name), then it cannot be accessed in a static method

– If X is declared with the reserved word static (such as a named constant or a method name), then it can be accessed within a method (block), provided the method (block) does not have any other identifier named X

Java Programming: From Problem Analysis to Program Design, 3e 57

Page 58: Chap07

58Java Programming: From Problem Analysis to Program Design, 3e

Example 7-12public class ScopeRules

{ static final double rate = 10.50; static int z; static double t; public static void main(String[] args) { int num; double x, z; char ch; //... } public static void one(int x, char y) { //... }

Scope Rules (continued)

Page 59: Chap07

59Java Programming: From Problem Analysis to Program Design, 3e

public static int w; public static void two(int one, int z) { char ch; int a; //block three { int x = 12; //... } //end block three //... }}

Scope Rules (continued)

Page 60: Chap07

60Java Programming: From Problem Analysis to Program Design, 3e

Scope Rules: Demonstrated

Page 61: Chap07

61Java Programming: From Problem Analysis to Program Design, 3e

Scope Rules: Demonstrated (continued)

Page 62: Chap07

62Java Programming: From Problem Analysis to Program Design, 3e

Method Overloading: An Introduction

• Method overloading: more than one method can have the same name

• Two methods are said to have different formal parameter lists if both methods have:– A different number of formal parameters, or– If the number of formal parameters is the same,

then the data type of the formal parameters, in the order you list, must differ in at least one position

Page 63: Chap07

63Java Programming: From Problem Analysis to Program Design, 3e

Method Overloading

public void methodOne(int x)

public void methodTwo(int x, double y)

public void methodThree(double y, int x)

public int methodFour(char ch, int x,

double y)

public int methodFive(char ch, int x,

String name)

• These methods all have different formal parameter lists

Page 64: Chap07

64Java Programming: From Problem Analysis to Program Design, 3e

Method Overloading (continued)

public void methodSix(int x, double y,

char ch)

public void methodSeven(int one, double u,

char firstCh)

• The methods methodSix and methodSeven both have three formal parameters and the data type of the corresponding parameters is the same

• These methods all have the same formal parameter lists

Page 65: Chap07

65Java Programming: From Problem Analysis to Program Design, 3e

Method Overloading (continued)

• Method overloading: creating several methods, within a class, with the same name

• The signature of a method consists of the method name and its formal parameter list

• Two methods have different signatures if they have either different names or different formal parameter lists– Note that the signature of a method does not include

the return type of the method

Page 66: Chap07

66Java Programming: From Problem Analysis to Program Design, 3e

Method Overloading (continued)

• The following method headings correctly overload the method methodXYZ:

public void methodXYZ()

public void methodXYZ(int x, double y)

public void methodXYZ(double one, int y)

public void methodXYZ(int x, double y,

char ch)

Page 67: Chap07

67Java Programming: From Problem Analysis to Program Design, 3e

Method Overloading (continued)

public void methodABC(int x, double y)

public int methodABC(int x, double y)

• Both these method headings have the same name and same formal parameter list

• These method headings to overload the method methodABC are incorrect

• In this case, the compiler will generate a syntax error– Notice that the return types of these method headings are different

Page 68: Chap07

68Java Programming: From Problem Analysis to Program Design, 3e

Programming Example: Data Comparison

• Input: data from 2 different files• Data format: Course Number followed by scores• Output: Course Number, Group Number, Course

Average• Solution

– Read from more than one file, write output to file– Generate bar graphs– User-defined methods and re-use (calculateAverage and printResult)

– Parameter passing

Page 69: Chap07

69Java Programming: From Problem Analysis to Program Design, 3e

Sample Output

Course No Group No Course Average CSC 1 83.71 2 80.82

ENG 1 82.00 2 78.20

HIS 1 77.69 2 84.15

MTH 1 83.57 2 84.29

PHY 1 83.22 2 82.60

Avg for group 1: 82.04Avg for group 2: 82.01

Programming Example: Data Comparison (continued)

Page 70: Chap07

70Java Programming: From Problem Analysis to Program Design, 3e

Programming Example: Data Comparison (continued)

Page 71: Chap07

71Java Programming: From Problem Analysis to Program Design, 3e

Chapter Summary

• Predefined methods

• User-defined methods– Value-returning methods– Void methods– Formal parameters– Actual parameters

• Flow of Execution

Page 72: Chap07

72Java Programming: From Problem Analysis to Program Design, 3e

Chapter Summary (continued)

• Primitive data type variables as parameters– One-way link between actual parameters and

formal parameters (limitations caused)

• Reference variables as parameters – Can pass one or more variables from a method– Can change value of actual parameter

• Scope of an identifier within a class• Method overloading