Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Methods
Chapter 5
Spring 2007
CS 101
Aaron Bloomfield
1
Preparation
Scene so far has been background material and experience
Computing systems and problem solving
Variables
Types
Input and output
Expressions
Assignments
Using objects
Standard classes and methods
Decisions (if, switch)
Loops (while, for, do-while)
Next: Experience what Java is really about
Design and implement objects representing information
2
and physical world objects
Object-oriented programming
Basis
Create and manipulate objects with attributes
behaviors that the programmer can specify
and
Mechanism
Classes
Benefits
An information type is design and implemented once
Reused as needed
No need reanalysis and re-justification of the
representation
3
Known Classes
Classes we’ve seen
BigInteger
String
Rectangle
Vector
Scanner
System
Classes we’ll be seeing soon
BigDecimal
But the first step is on creating methods…
4
Methods
5
Methods we’ve seen
We’ve seen methods (functions) before
angleSin = Math.sin (90 * PI/180.0);
System.out.println (“Hello world”);
value = card.getBlackjackValue();
We are going to start defining them
Note that many of these “return” a value
Math.sin() and card.getBlackjack()
The way to name methods is the same as variables
allTheWordsTogether
With the first letter of each word capitalized
Except the very first letter is lower case
6
Our first class with methods
public class Methods1 {
public static void main (String args[]) {
Scanner stdin = new Scanner (System.in);
System.out.println ("Enter a valid int value");
int value = stdin.nextInt();
if ( value == 1 )
validValue();
else if ( value == 2 )
validValue();
else if ( value == 3 )
invalidValue();
else if ( value == 4 )
invalidValue();
else
validValue();
}
7
}
Our first class with methods, continued
public static void invalidValue() {
System.out.println ("You have entered an invalid value.");
System.out.println ("The program will now exit.");
System.exit (0);
}
public static void validValue() {
System.out.println ("You have entered an valid value.");
System.out.println ("Congratulations!");
System.out.println ("The program will now exit.");
System.exit (0);
}
8
Program Demo
Methods1.java
9
What’s happening there
public static void validValue() {
System.out.println ("You have entered an valid value.");
System.out.println ("Congratulations!");
System.out.println ("The program will now exit.");
System.exit (0);
}
public static void main (String args[]) {
Scanner stdin = new Scanner (System.in);
System.out.println ("Enter a valid int value");
int value = stdin.nextInt();
if ( value == 1 )
value
stdin
validValue();
// ...
Scanner
}
1
10
Notes on these methods
At this point, all methods in the class are static
We will be discussing what static means later in this slide
set
Until then, I’ll be ignoring it, and just telling you when
things should and should not be static
Sorry!
None of those two methods return a value
Notice the “void” before the method name
And none take in any parameters
Notice the empty parameters after the method name
11
13
A previous HW J3
14
15
Revamping last semester’s HW J3
Start
here
Done tech
support?
Bitter
yet?
Successful
managing?
Cynical
guru
Promoted
Become
a coder
A revised HW 3
flowchart
Green paths are
“yes” paths, red
are “no” paths
We’ll
make
a
slight modification
to the diagram:
Note that this part
is repeated twice!
Been a
sysadmin?
Worked
with NT?
Want to
play
w/nukes?
Hate
people?
Start
over
Public
danger
Defense
contractor
16
HW J3 Code
The yellow
boxed part is
what was
repeated from
the previous
slide
if ( extractor.askUser(Q_TECH_SUPPORT) ){
if ( extractor.askUser(Q_BITTER_YET) )
if ( extractor.askUser(Q_MANAGEMENT) )
System.out.println (A_CYNICAL);
else
System.out.println (A_PROMOTED);
else
System.out.println (A_START_OVER);
} else if ( extractor.askUser(Q_BEEN_SYSADMIN) ){
if ( extractor.askUser(Q_HATE_PEOPLE) ) {
System.out.println (A_CODER);
} else if ( extractor.askUser(Q_WINNT) ){
if ( extractor.askUser(Q_NUCLEAR_WEAPONS) )
System.out.println (A_DEFENSE_CONTRACTOR);
else
System.out.println (A_PUBLIC_DANGER);
} else
System.out.println (A_START_OVER);
} else if ( extractor.askUser(Q_WINNT) ){
if ( extractor.askUser(Q_NUCLEAR_WEAPONS) )
System.out.println (A_DEFENSE_CONTRACTOR);
else
System.out.println (A_PUBLIC_DANGER);
} else
System.out.println (A_START_OVER);
17
HW J3 Code with methods
The yellow
boxed part is
what was
repeated from
the previous
slide
if ( extractor.askUser(Q_TECH_SUPPORT) ){
if ( extractor.askUser(Q_BITTER_YET) )
if ( extractor.askUser(Q_MANAGEMENT) )
System.out.println (A_CYNICAL);
else
System.out.println (A_PROMOTED);
else
System.out.println (A_START_OVER);
} else if ( extractor.askUser(Q_BEEN_SYSADMIN) ){
if ( extractor.askUser(Q_HATE_PEOPLE) ) {
System.out.println (A_CODER);
} else
doBottomPartOfFlowchart();
} else
doBottomPartOfFlowchart();
18
HW J3 Code with methods
The doBottomPartOfFlowchart method:
public static void doBottomPartOfFlowchart() {
if ( extractor.askUser(Q_WINNT) ){
if ( extractor.askUser(Q_NUCLEAR_WEAPONS) )
System.out.println (A_DEFENSE_CONTRACTOR);
else
System.out.println (A_PUBLIC_DANGER);
} else
System.out.println (A_START_OVER);
}
19
What happened here
We took a common set of code
Wrote it once
But used it multiple times (twice in this case)
Granted, the code was a small segment (7 lines)
But, in other programs, could be very large
This is called Refactoring
It is an essential principle of software engineering
Has other names: factoring (notice there is no ‘re’ at the
beginning), extracting a method, etc.
20
Pros of Refactoring
Benefits of Refactoring
Reduce length of code
As you don’t have to repeat that section of code
multiple times
Make code easier to read
The main if-else-if statement is shorter, thus easier to
understand what’s going on
Changes are easier to make
If we want to modify that part of the flowchart, we only
have to do it once
Rather than searching for each of the repeated code
segments in a program
21
Cons of Refactoring
Drawbacks of Refactoring
Because you are calling another method, it will be slightly
slower
On the order of a few nanoseconds
Modern compilers can sometimes eliminate this penalty
The general consensus is that the benefits of Refactoring far
outweigh the drawback(s)
22
23
Return Values
24
The return keyword
The return keyword immediately stops execution of a method
And jumps back to whatever called that method
And possibly returns a value (we’ll see this next)
Consider the following method
public static void foo (int x) {
if ( x == 1 )
return;
System.out.println (“x is not 1”);
}
This method will only print the String if x is not 1
25
Return values
At some point in those methods, Java must be told to take a value
and “pass” it back
Consider angleSin = Math.sin (90 * PI/180.0);
At some point in the Math.sin() method, the sin has been
computed
And that value must be “passed back” to be stored in angle
Consider value = card.getBlackjackValue();
At some point in the card.getBlackjackValue() method, the value
has been computed
And that value must be “passed back” to be stored in value
This is called “returning” a value from a method
Note that some methods don’t return a value
System.out.println(), for example
26
Return values (aka return types)
public class Methods2 {
public static int returnsAValue () {
return 1;
}
public static double alsoReturnsAValue() {
return 1.0;
}
public static void main (String args[]) {
int value1 = returnsAValue();
System.out.println (value1);
double value2 = alsoReturnsAValue();
System.out.println (value2);
}
}
// The following line requires a cast
int value3 = (int) alsoReturnsAValue();
System.out.println (value3);
27
Program Demo
Methods2.java
28
Return types
All
a return statement does is take the value
Which could be a number
Or a value in a variable
Or an expression (such as x+1)
And “pass” it back to whatever called the method
29
How well do you feel you understand
return values?
a)
b)
c)
d)
e)
Very well! This stuff is so easy.
With a little review, I’ll be good.
Not very well at all.
I’m so lost. What’s a return type again?
I’d rather not answer this question, thanks.
30
Parameters
Sometimes you need to pass in parameters to tell a method
how to perform
Consider Math.sin() – it needs to know the angle
The parameters are listed between the parenthesis after the
method name
public static void main (String args[])
The methods we will study next compute (and return) x2, x3,
and x4
31
The methods
public static int square (int x) {
int theSquare = x * x;
return theSquare;
}
public static int cube (int x) {
return x * x * x;
}
public static int fourthPower (int x) {
return square(x) * square(x);
}
32
A method with multiple parameters
public static int squareOrCube (int which, int value) {
if ( which == 1 )
return value * value;
else if ( which == 2 ) {
int cube = value * value * value;
return cube;
} else
return 0;
}
33
The main() method
import java.util.*;
public class Methods3 {
// the previous methods go here
public static void main (String args[]) {
Scanner stdin = new Scanner (System.in);
System.out.println ("Enter an int value");
int value = stdin.nextInt();
int theSquare = square(value);
System.out.println ("Square is " + theSquare);
System.out.println ("Cube is " + cube (value));
System.out.println ("Square is " + squareOrCube (1, value));
System.out.println ("Cube is " + squareOrCube (2,value));
System.out.println ("Fourth power is " + fourthPower (value));
}
34
}
Program Demo
Methods3.java
35
36
Returning objects
We can also return objects from methods
What gets returned is the reference
to the object
name
public class Methods4 {
public static String getCourse () {
String name = "CS 101";
return name;
}
public static void main (String args[]) {
String courseName = getCourse();
System.out.println (courseName);
}
}
String
“CS 101”
courseName
37
Program Demo
Methods4.java
39
Modifying parameters
Consider the following code
public class Methods5 {
public static void changeValue (int x) {
x = 7;
}
public static void main (String args[]) {
int y = 5;
changeValue(y);
System.out.println (y);
}
}
What gets printed?
40
Program Demo
Methods5.java
41
Pass by value
Java is a pass-by-value language
This means that a COPY of the parameter’s value is passed
into the method
If a method changes that value, only the COPY is changed
Once the method returns, the copy is forgotten
And thus the change is not visible outside the method
There are other manners of returning values that are used in
other languages
Pass by reference
Pass by name (nobody uses this anymore)
We will see about trying to change object parameters later in
this slide set
42
How well do you feel you understand
parameters?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost
Ve
1.
43
Variable scoping
A variable is visible within the block it is declared
Called the “scope” of the variable
public class Scoping {
static int z
This variable is visible
anywhere in the Scoping class
public static void foo (int x) {
// ...
}
This parameter is visible
only in the foo() method
public static void bar () {
// ...
}
public static void main (String[] args) {
int y;
This local variable is visible until
// ...
the end of the main() method
}
}
44
How well do you feel you understand
variable scoping?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost
Ve
1.
45
Method notes summary
You can put the methods in a class in any order
Java doesn’t care which one is listed first
Thus, you can call a method listed later in the method
This is different than C/C++
All methods must specify a return type
If it’s void, then no value is returned
Parameters can’t be changed within a method
Although the objects that the parameters point to can be
46
The 2005 Ig Nobel Prizes
Agricultural
history
Physics
Medicine
Literature
Peace
Economics
Chemistry
Biology
Nutrition
Fluid dynamics
“The Significance of Mr. Richard Buckley’s Exploding
Trousers”
The pitch drop experiment, started in 1927
Neuticles – artificial replacement testicles for dogs
The 409 scams of Nigeria for a “cast of rich characters”
Locust brain scans while they were watching Star Wars
For an alarm clock that runs away, thus making people more
productive
“Will Humans Swim Faster or Slower in Syrup?”
For cataloging the odors of 131 different stressed frogs
To Dr. Yoshiro Nakamats who catalogued and analyzed every
meal he ate for the last 34 years (and counting)
“Pressures Produced When Penguins Pooh – Calculations on
Avian Defaecation”
47
More on parameter passing
48
Modifying parameters
Consider the following code
public class Methods5 {
public static void changeValue (int x) {
x = 7;
}
x
5
7
y
5
public static void main (String args[]) {
int y = 5;
changeValue(y);
System.out.println (y);
}
}
What gets printed?
5 is printed
49
Program Demo
Methods5.java
50
Pass by value
Java is a pass-by-value language
This means that a COPY of the parameter’s value is passed
into the method
If a method changes that value, only the COPY is changed
Once the method returns, the copy is forgotten
And thus the change is not visible outside the method
There are other manners of returning values that are used in
other languages
Pass by reference
Pass by name (nobody uses this anymore)
We will see about trying to change object parameters later in
this slide set
51
Modifying parameters
Consider the following code
import java.awt.*;
Rectangle
r
public class Methods6 {
public static void changeValue
(Rectangle r) {
r.setSize (10,20);
}
- width = 10
1
- height = 20
2
+ Rectangle ()
+ Rectangle (int width, int height)
+ setSize (int width, int height)
+ getWidth ()
public static void main (String args[]) {
Rectangle rect = new Rectangle(1, 2);
changeValue(rect);
System.out.println (rect.getWidth());
}
rect
}
What gets printed?
10 is printed
52
Program Demo
Methods6.java
53
Fan-supplied demotivators!
54
Pass by value
Java is still a pass-by-value language
This means that a COPY of the parameter’s value is passed
into the method
But the parameter is a REFERENCE to an object
The object itself is not passed
So any changes to the reference are forgotten about
But you can modify the object it refers to
55
Rectangle
Modifying parameters
Consider the following code
import java.awt.*;
- width = 10
+ Rectangle ()
+ Rectangle (int width, int height)
+ setSize (int width, int height)
+ getWidth()
r
public class Methods7 {
Rectangle
- width = 1
public static void changeValue
(Rectangle r) {
r = new Rectangle (10,20);
}
What gets printed?
1 is printed
- height = 2
+ Rectangle ()
+ Rectangle (int width, int height)
+ setSize (int width, int height)
+ getWidth()
public static void main (String args[]) {
Rectangle rect = new Rectangle(1, 2);
changeValue(rect);
System.out.println (rect.getWidth());
}
}
- height = 20
rect
The only change!
56
Program Demo
Methods7.java
57
Pass by value
Java is still a pass-by-value language
This means that a COPY of the parameter’s value is passed
into the method
But the parameter is a REFERENCE to an object
The object itself is not passed
So any changes to the reference are forgotten about
But you can modify the object it refers to
58
How well do you feel you understand
parameter passing?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost
Ve
1.
59
A frisbee demo of parameter passing…
60
How well do you feel you understand
parameter passing?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost
Ve
1.
61
Today’s demotivators
62