65
CSC 142 Computer Science II Zhen Jiang West Chester University [email protected]

CSC 142 Computer Science II Zhen Jiang West Chester University [email protected]

Embed Size (px)

Citation preview

Page 1: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

CSC 142 Computer Science II

Zhen Jiang West Chester University

[email protected]

Page 2: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

Outline Introduction (use of method) Declaring a method Calling a method Methods calling methods Control flow of method call Generalizing method Parameterization Multiple parameters Parameter mystery Return values (vs. void) Summary

Page 3: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

3

Procedural decomposition using methods

04/19/23

Page 4: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

4

public class FraggleRock { public static void main(String[] args) { System.out.println("Dance your cares away,"); System.out.println("Worry's for another day."); System.out.println("Let the music play,"); System.out.println("Down at Fraggle Rock."); System.out.println(); System.out.println("Dance your cares away,"); System.out.println("Worry's for another day."); System.out.println("Let the music play,"); System.out.println("Down at Fraggle Rock."); } }

Redundancy in programs

04/19/23

Page 5: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

5

This is a space & timing problem: to find the redundancy of a certain part of program running at different time.

Compared with the timing problem in loop: 1st, 2nd, 3rd … iterations

Compared with the space problem in arrays: 1st, 2nd, 3rd … elements

1st, 2nd, 3rd … appearances of the same/similar procedure in your program!

04/19/23

Page 6: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

6

public class FraggleRock {

public static void singChorus() { System.out.println("Dance your cares away,"); System.out.println("Worry's for another day."); System.out.println("Let the music play,"); System.out.println("Down at Fraggle Rock."); }

public static void main(String[] args) { singChorus(); System.out.println(); singChorus(); }}

declaration, definition,

body

First time, four printlines repeated

The second time, four prints repeated

04/19/23

Page 7: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

7

static method: A group of statements given a name.

To use a static method:1. define it (write down the recipe)

Write a group of statements and give it a name.

2. call it (cook using the recipe) Tell our program to execute the method.

04/19/23

Page 8: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

8

public class FraggleRock {

public static void singChorus() { System.out.println("Dance your cares away,"); System.out.println("Worry's for another day."); System.out.println("Let the music play,"); System.out.println("Down at Fraggle Rock."); }

public static void main(String[] args) { singChorus(); System.out.println(); singChorus(); }}

Method body, declaration,

definition

Method call, 1st time

Method call, 2nd time

04/19/23

Page 9: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

9

Declaring a static method

The syntax for declaring a static method, Figure 5-3, p276:

public class <class name> {...public static void <method name>() {

<statement>;<statement>;…<statement>;

}}04/19/23

Page 10: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

10

Calling a static method

The syntax for calling a static method (p276):

<method name>();

04/19/23

Page 11: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

11

Declaring a static methodpublic static void printAffirmation() {

System.out.println("I am good enough!");System.out.println("I am smart enough!");System.out.println("People like me!");

} Calling a static method (possibly multiple times)

printAffirmation();printAffirmation();

OutputI am good enough!I am smart enough!People like me!I am good enough!I am smart enough!People like me!

04/19/23

Page 12: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

12

Methods calling methods One static method can call another (e.g., Code 5-4, p281):public class MethodsExample { public static void main(String[] args) { message1(); message2(); System.out.println("Done with main."); } public static void message1() { System.out.println("This is message1."); } public static void message2() { System.out.println("This is message2."); message1(); System.out.println("Done with message2."); }}

Output:This is message1.This is message2.This is message1.Done with message2.Done with main.

04/19/23

Page 13: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

13

When a method is called, the execution "jumps" into that method executes all of the method’s statements "jumps" back to the statement after the

method call

Control flow of methods

04/19/23

Page 14: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

14

public class MethodsExample {public static void main(String[] args) {

message1();

message2();

... }}

public static void message1() { System.out.println("This is message1.");}

public static void message2() { System.out.println("This is message2"); message1();

System.out.println("Done with message2.");}

public static void message1() { System.out.println("This is message1.");}

Output:This is message1.This is message2.This is message1.Done with message2.Done with main.

04/19/23

Slide 12 (continue)

Page 15: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

15

Example: Figure drawing

______ / \/ \\ / \______/

\ / \______/+--------+

______ / \/ \| STOP |\ / \______/

______ / \/ \+--------+

Write a program to print the figures. Use static methods to capture structure and and eliminate redundancy.

04/19/23

Page 16: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

16

Version 1: Unstructured

______ / \/ \\ / \______/

\ / \______/+--------+

______ / \/ \| STOP |\ / \______/

______ / \/ \+--------+

Create an empty program with a skeletal header and main method.

Copy the expected output into it, surrounding each line with System.out.println syntax.

Run and verify that it produces the correct output.

04/19/23

Page 17: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

17

// Suzy Student, CSC 142, Autumn 2012// This program prints several assorted figures.//public class Figures1 { public static void main(String[] args) { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println(); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println("+--------+"); System.out.println(); System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("| STOP |"); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println(); System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("+--------+"); }}

04/19/23

Page 18: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

18

Version 2: Structured with redundancy

______ / \/ \\ / \______/

\ / \______/+--------+

______ / \/ \| STOP |\ / \______/

______ / \/ \+--------+

Identify the overall structure of the output, and divide the main method into several static methods based on this structure.

04/19/23

Page 19: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

19

______ / \/ \\ / \______/

\ / \______/+--------+

______ / \/ \| STOP |\ / \______/

______ / \/ \+--------+

Identify the overall structure of the output, and divide the main method into several static methods based on this structure.

The structure of the output: initial "egg" figure second "teacup" figure third "stop sign" figure fourth "hat" figure

This structure can be represented by methods:

drawEgg drawTeaCup drawStopSign drawHat

04/19/23

Page 20: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

20

// Suzy Student, CSC 142, Autumn 2012// Prints several assorted figures, with methods for structure.//public class Figures2 { public static void main(String[] args) { drawEgg(); drawTeaCup(); drawStopSign(); drawHat(); } // Draws a figure that vaguely resembles an egg. public static void drawEgg() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println(); } // Draws a figure that vaguely resembles a teacup. public static void drawTeaCup() { System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println("+--------+"); System.out.println(); }

04/19/23

Page 21: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

21

// Draws a figure that vaguely resembles a stop sign. public static void drawStopSign() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("| STOP |"); System.out.println("\\ /"); System.out.println(" \\______/"); System.out.println(); } // Draws a figure that vaguely resembles a hat. public static void drawHat() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); System.out.println("+--------+"); }}

04/19/23

Page 22: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

22

Version 3: Structured without redundancy

______ / \/ \\ / \______/

\ / \______/+--------+

______ / \/ \| STOP |\ / \______/

______ / \/ \+--------+

Further divide the program to eliminate all redundancy.

04/19/23

Page 23: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

23

Further divide the program to eliminate all redundancy.

The redundancy: top half of egg (purple) bottom half of egg (green) divider line (yellow)

This redundancy can be fixed by methods: drawEggTop drawEggBottom drawLine

______ / \/ \\ / \______/

\ / \______/+--------+

______ / \/ \| STOP |\ / \______/

______ / \/ \+--------+

04/19/23

Page 24: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

24

// Suzy Student, CSC 142, Autumn 2012// Prints several figures, with methods for structure and redundancy.

public class Figures3 { public static void main(String[] args) { drawEgg(); drawTeaCup(); drawStopSign(); drawHat(); } // draws redundant part that looks like the top of an egg public static void drawEggTop() { System.out.println(" ______"); System.out.println(" / \\"); System.out.println("/ \\"); } // draws redundant part that looks like the bottom of an egg public static void drawEggBottom() { System.out.println("\\ /"); System.out.println(" \\______/"); }

04/19/23

Page 25: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

25

// Draws a figure that vaguely resembles an egg. public static void drawEgg() { drawEggTop(); drawEggBottom(); System.out.println(); }

// Draws a figure that vaguely resembles a teacup. public static void drawTeaCup() { drawEggBottom(); System.out.println("+--------+"); System.out.println(); } // Draws a figure that vaguely resembles a stop sign. public static void drawStopSign() { drawEggTop(); System.out.println("| STOP |"); drawEggBottom(); System.out.println(); } // Draws a figure that vaguely resembles a hat. public static void drawHat() { drawEggTop(); System.out.println("+--------+"); }}

04/19/23

Page 26: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

26

Generalizing Method Consider the task of drawing the following figures:

*************

*******

***********************************

*********** ***********

****** ** ******

The lines and figures are similar, but not exactly the same.04/19/23

Page 27: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

27

public class Stars { public static void main(String[] args) { drawLineOf13Stars(); drawLineOf7Stars(); drawLineOf35Stars(); draw10x3Box(); draw5x4Box(); } public static void drawLineOf13Stars() { for (int i = 1; i <= 13; i++) { System.out.print("*"); } System.out.println(); } public static void drawLineOf7Stars() { for (int i = 1; i <= 7; i++) { System.out.print("*"); } System.out.println(); } public static void drawLineOf35Stars() { for (int i = 1; i <= 35; i++) { System.out.print("*"); } System.out.println(); } ...

Observation: Methods are redundant.

Would constants help us solve this problem?

Other ideas?

04/19/23

Page 28: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

28

What if we had the following? drawLine - A method to draw a line of any

number of stars. drawBox - A method to draw a box of any size.

main

drawLine

*******

7

drawLine

*************

13

Character of each repetition

General format ofrepetition

04/19/23

Page 29: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

29

Parameterization

parameterized method: A method that is given extra information (e.g.

number of stars to draw) when it is called. The common part of all calls in a generalization: 1st,

2nd, 3rd, …

parameter: A value passed to a method by its caller, mapping the difference of each call.

Examples: System.out.println(“*”) or System.out.println(“**”)

random.nextInt(10)04/19/23

Page 30: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

30

Parameterized method declaration syntax:public static void <name> (<type> <name>) { <statement(s)>;}

The scope of the parameter is the entire method. P286

Example:public static void printSpaces(int count) { for (int i = 1; i <= count; i++) { System.out.print(" "); }}

Whenever printSpaces is called, the caller must specify how many spaces to print.

count’s scope

04/19/23

Page 31: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

31

passing an argument for parameter: Calling a parameterized method and specifying a value for its parameter(s). P283

Parameterized method call syntax:<name>(<expression>);

Example:System.out.print("*");printSpaces(7);System.out.print("**");int x = 3 * 5;printSpaces(x + 2);System.out.println("***");

Output:

* ** ***04/19/23

Page 32: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

32

When the parameterized method call executes: the value passed to the method is copied into the parameter

variable the method's code executes using that value

public static void main(String[] args) { printSpaces(7); printSpaces(13);}

public static void printSpaces(int count) { for (int i = 1; i <= count; i++) { System.out.print(" "); }}

137count:

04/19/23

Page 33: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

33

value semantics: When primitive variables (such as int or double) are passed as parameters, their values are copied into the method's parameter variable. P288 (Code 5-6)

Modifying the method’s parameter variable will NOT affect the the variable which was passed to the method.

... int x = 23; strange(x); System.out.println("2. x = " + x); // this x unchanged ...}

public static void strange(int x) { x = x + 1; // modifies my x System.out.println("1. x = " + x);}

Output:

1. x = 242. x = 23

04/19/23

Page 34: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

34

ERROR: Not passing a parameter to a method that accepts parameters.

printSpaces(); // ERROR: parameter value required

ERROR: Passing a parameter of the wrong type.

printSpaces(3.7); // ERROR: must be of type int The parameter must satisfy the domain of the method.

04/19/23

Page 35: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

35

Change the Stars program to use parameterized methods.

public class Stars { public static void main(String[] args) { drawLineOf13Stars(); drawLineOf7Stars(); drawLineOf35Stars(); draw10x3Box(); draw5x4Box(); } public static void drawLineOf13Stars() { for (int i = 1; i <= 13; i++) { System.out.print("*"); } System.out.println(); } public static void drawLineOf7Stars() { for (int i = 1; i <= 7; i++) { System.out.print("*"); } System.out.println(); } ...04/19/23

Page 36: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

36

// Prints several lines of stars.// Uses a parameterized method to remove redundancy.

public class Stars2 { public static void main(String[] args) { drawLine(13); drawLine(7); drawLine(35); } // Prints the given number of stars plus a line break. public static void drawLine(int count) { for (int i = 1; i <= count; i++) { System.out.print("*"); } System.out.println(); }}

04/19/23

Page 37: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

37

Multiple parameters

Methods can accept as many parameters as you like, p286.

When the method is called, it must be passed values for each of its parameters.

Multiple parameters declaration syntax:public static void <name> (<type> <name>, <type> <name>, ..., <type> <name>) { <statement(s)>;}

Multiple parameters call syntax:<name>(<expression>, <expression>, ...,

<expression>);04/19/23

Page 38: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

38

// Prints several lines and boxes made of stars.// Third version with multiple parameterized methods.

public class Stars3 { public static void main(String[] args) { drawLine(13); drawLine(7); drawLine(35); System.out.println(); drawBox(10, 3); drawBox(5, 4); drawBox(20, 7); } // Prints the given number of stars plus a line break. public static void drawLine(int count) { for (int i = 1; i <= count; i++) { System.out.print("*"); } System.out.println(); }

04/19/23

Page 39: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

39

// Prints a box of stars of the given size. public static void drawBox(int width, int height) { drawLine(width); for (int i = 1; i <= height - 2; i++) { System.out.print("*"); printSpaces(width - 2); System.out.println("*"); } drawLine(width); } // Prints the given number of spaces. public static void printSpaces(int count) { for (int i = 1; i <= count; i++) { System.out.print(" "); } } }

04/19/23

Page 40: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

40

Exercisepublic static void main(String[] args) { printNumber(4, 9); printNumber(17, 6); printNumber(8, 0); printNumber(0, 8);}

Output:444444444171717171717

00000000

04/19/23

Page 41: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

41

public static void main(String[] args) { printNumber(4, 9); printNumber(17, 6); printNumber(8, 0); printNumber(0, 8);}

Output:444444444171717171717

00000000

public static void printNumber(int number, int count){

for(int i=0; i<count; i++) {System.out.print(number);

}System.out.println();

}04/19/23

Page 42: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

42

Write a method named printDiamond that accepts a height as a parameter and prints a diamond figure. * ******** *** *

Write a method named multiplicationTable that accepts a maximum integer as a parameter and prints a table of multiplication from 1 x 1 up to that integer times itself.

04/19/23

Page 43: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

43

Rewrite the following program to use parameterized methods:

// Draws triangular figures of stars.public class Loops { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { for (int j = 1; j <= i - 1; j++) { System.out.print(" "); } for (int j = 1; j <= 10 - 2 * i + 1; j++) { System.out.print("*"); } System.out.println(); } for (int i = 1; i <= 12; i++) { for (int j = 1; j <= i - 1; j++) { System.out.print(" "); } for (int j = 1; j <= 25 - 2 * i; j++) { System.out.print("*"); } System.out.println(); } }}04/19/23

Page 44: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

44

// Draws triangular figures using parameterized methods.public class Loops { public static void main(String[] args) { triangle(5); triangle(12); } // Draws a triangle figure of the given size. public static void triangle(int height) { for (int i = 1; i <= height; i++) { printSpaces(i - 1); drawLine(2 * height + 1 - 2 * i); } }}

04/19/23

Page 45: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

What does this code do?public static void main(String[] args) {

int a = 7;

int b = 35;

System.out.println(a + " " + b);

int temp = a;

a = b;

b = temp;

System.out.println(a + " " + b);

}

45

Parameter mystery (value vs. object)

04/19/23

Page 46: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

public static void main(String[] args) { int a = 7; int b = 35; System.out.println(a + " " + b);

// swap a with b swap(a, b);

System.out.println(a + " " + b);}

public static void swap(int a, int b) { int temp = a; a = b; b = temp;}

Does this work? Why or why not?

4604/19/23

Page 47: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

Class type vs. primitive type, P288-292 When a primitive type of argument is passed for

parameter, the value is copied. A method cannot change the value of an argument.

When an object is passed as a parameter, the object is not copied. The same object is referred to by both the original argument and the method's parameter.

If a method is called on the parameter, it will affect the original object that was passed to the method.

4704/19/23

Page 48: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

Object are reference value like this:

Dog balto = new Dog();

Balto.name = “Balto”;

balto: “Balto” ?

name: breed:

Variable, with slot

in memory

Reference, a pointer to the object’s

data

?age:

04/19/23 48

Page 49: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

Example:public static void main(String[] args) { Point p1 = new Point(2, 3); move(p1);}

public static void move(Point p) { p.setLocation(-1, -2);}

49

p1 y:

x:

p

2 3-1 -2

04/19/23

Page 50: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

50

What is the output of the following program?public class Mystery { public static void main(String[] args) { int x = 5, y = 9, z = 2; mystery(z, y, x); System.out.println(x + " " + y + " " + z); mystery(y, x, z); System.out.println(x + " " + y + " " + z); }}

public static void mystery(int x, int z, int y) { x++; y = x - z * 2; x = z + 1; System.out.println(x + " " + y + " " + z); }}

x: y: z:

x: z: y:

04/19/23

Page 51: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

51

Return Values (vs. Void) return: To send a value out as the result of a

method, which can be used in an expression, p297.

A return value is like the opposite of a parameter.

Parameters pass information in from the caller to the method.

Return values pass information out from a method to its caller.

How would this be useful?04/19/23

Page 52: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

52

Java has a class called Math that has several useful static methods to perform mathematical calculations.

logarithm base elog(value)

nearest whole numberround(value)

square rootsqrt(value)

random double between 0 and 1

random()

base to the exponent powerpow(base, exponent)

smaller of two valuesmin(value1, value2)

larger of two valuesmax(value1, value2)

logarithm base 10log10(value)

cosine, in radianscos(value)

absolute valueabs(value)

DescriptionMethod name

04/19/23

Page 53: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

53

Math method call syntax:Math.<method name>(<parameter(s)>)

Examples:double squareRoot = Math.sqrt(121.0);System.out.println(squareRoot); // 11.0

int absoluteValue = Math.abs(-50);System.out.println(absoluteValue); // 50

System.out.println(Math.min(3, 7) + 2); // 5

Notice that the preceding calls are used in expressions; they can be printed, stored into a variable, etc…

04/19/23

Page 54: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

54

The Math methods do not print results to the console.

Instead, each method evaluates to produce (or return) a numeric result, which can be used in an expression.

main

Math.abs

-42

Math.round

2.71

42

3

04/19/23

Page 55: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

55

Evaluate the following expressions: Math.abs(-1.23) Math.pow(3, 2) Math.pow(10, -2) Math.sqrt(121.0) - Math.sqrt(256.0) Math.ceil(6.022) + Math.floor(15.9994) Math.abs(Math.min(-3, -5))

Math.max and Math.min can be used to bound numbers.

04/19/23

Page 56: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

56

Declaring a method that returns a value (p298):

public static <type> <name>(<parameters>) { <statement(s)>;}

Returning a value from a method:

return <expression>;

Example:// Returns the given number cubed (to the third power).public static int cube(int number) { return number * number * number;}

04/19/23

Page 57: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

57

ERROR: Writing statements after a return statement.

public static int increment(int x) { return (x + 1); x = x + 1; // ERROR: statement unreachable! }

ERROR: Confusing the return variable with a variable in the calling method, AKA ignoring the return value.

public class ReturnExample { public static void main(String[] args) { int x = 1; addOne(x); System.out.println("x = " + x); }

public static int addOne(int x) { x = x + 1; return x; }}

04/19/23

Page 58: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

58

Write a method called isFactor that accepts two integers as parameters, and returns true if the first is a factor of the second.

04/19/23

Page 59: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

59

Methods can return different values under different conditions:

public static int min(int a, int b) { if (a > b) { return b; } else { return a; }}

public static String message(int place) { if (place == 1) { return "You won!"; } else { return "If you're not first, you're last!"; }}

04/19/23

Page 60: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

60

public static int min(int a, int b) {

if (a > b) {

return b;

}

}

The compiler will complain about a "missing return statement". Why?

ERROR: Not returning a value in every path. In the above example, what if a <= b?

04/19/23

Page 61: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

61

public static int min(int a, int b) { if (a > b) { return b; } else if (a <= b) { return a; }}

It still produces the "missing return statement" error. Why?

To our eyes, it is clear that all paths (greater, equal, less) do return a value.

But the compiler thinks that if/else if code might choose not to execute any branch, so it refuses to accept this code.

How can we fix it?04/19/23

Page 62: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

62

Write a program that prompts the user for a maximum integer and prints out a list of all prime numbers up to that maximum. Here is an example log of execution:

Maximum number? 50

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47

15 total primes

04/19/23

Page 63: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

63

import java.util.*;

public class PrintPrimes { public static void main(String[] args) { Scanner console = new Scanner(System.in); printPrimes(getNumber(console)); } public static int countFactors(int num) { int count = 0; for (int i = 1; i <= num; i++) { if (num % i == 0) { count++; } } return count; }

...

04/19/23

Page 64: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

64

public static int getNumber(Scanner console) { System.out.print("Maximum number? "); return console.nextInt(); }

public static void printPrimes(int max) { int numPrimes = 0; if (max >= 2) { System.out.print(2); numPrimes++; for (int i = 3; i <= max; i++) { if (countFactors(i) == 2) { numPrimes++; System.out.print(", " + i); } } System.out.println(); } System.out.println(numPrimes + " total primes"); }}

04/19/23

Page 65: CSC 142 Computer Science II Zhen Jiang West Chester University zjiang@wcupa.edu

Procedure decomposition Method declaration, p276 Method call & control flow Scope of local variable, p286 Figure drawing, sample code, slides 15-25 Parameter and argument, p283 Primitive type (p288) vs. class type (p289-292) Return (vs. void) , p297

6504/19/23

Summary