Transcript Mar 23

COMP 14
Introduction to Programming
Mr. Joshua Stough
March 23, 2005
Monday/Wednesday 11:00-12:15
Peabody Hall 218
Today
• Short Review
• Program 4
– Static
– Arrays
– Reserved word this
Announcements
Review
Scope
public class Rectangle
{
// variables declared here are class-level
// available in all methods in Rectangle class
public int computeArea()
{
// variables declared here are method-level
// only available in computeArea()
}
public void print()
{
// variables declared here are method-level
// only available in print()
}
}
Review
Overloading Methods
• Overloading - the process of using the same method
name for multiple methods
• The signature of each overloaded method must be
unique
– number of parameters
– type of the parameters
– not the return type of the method, though
• The compiler determines which version of the method
is being invoked by analyzing the parameters
Review
Rectangle r2 = new Rectangle (5, 10);
public class Rectangle
{
private int length;
private int width;
public Rectangle ()
{
length = 0;
width = 0;
}
public Rectangle (int l, int w)
{
length = l;
width = w;
}
Review
• A method should be relatively small
– it should be able to be understood as a single
entity
– its name should fully describe its function
• A potentially large method should be
decomposed into several smaller methods as
needed for clarity
• A service method of an object may call one or
more support methods to accomplish its goal
Thought Exercise
Write a method for the Rectangle class called
printBox that will print the rectangle as a
box made of %
example: length = 3, width = 5
%%%%%
%
%
%%%%%
public void printBox ()
{
for (int i = 1; i <= width; i++)
System.out.print("%");
System.out.println( );
for (int i = 1; i <= length - 2; i++) {
System.out.print("%");
for (int j = 1; j <= width - 2; j++)
System.out.print(" ");
System.out.println("%");
}
length = 3, width = 8
}
for (int i = 1; i <= width; i++) %%%%%%%%
System.out.print("%");
%
%
System.out.println( );
%%%%%%%%
Blackjack
• Playing cards
– 13 faces (2-10, Jack, Queen, King, Ace)
– 4 suits (Spades, Clubs, Diamonds, Hearts)
• Deck of cards
– 52 cards (13 * 4)
• Blackjack Points
– Jack, Queen, King: 10
– Ace: 1 or 11
Blackjack
• Goal: Have the hand (group of cards)
with the total point value closest to 21
("Blackjack") without going over
• Play
– get two cards
– "hit" (add a card) or "stand"
• Demo (program 6)
www.cs.unc.edu/~mcweigle/courses/comp14-spr04/code/prog/Blackjack.html
Program 4
•
•
•
•
Due: Wednesday, March 30 at 11:59pm
75 points
Implement Card class
Implement method for determining point
value given a Card object
• Create 4 Card objects, print each card and its
point value, sum the total point value of the 4
cards, adjust total if it's over 21 and there are
Aces
• You will be graded on how your program
works with other cards, too
Card class
• What should be the member variables of a
playing card?
– what things completely describe an individual
card?
face
suit
– what data types should we use?
if we use constants to represent
the words, we can store the face
and suit with integers
• Don't forget the visibility modifiers
Program 4 Outlines
• Card.java
• BlackjackGame.java
• Blackjack.java
The toString Method
• Special method in Java classes
• Produces a String object based on the
current object, suitable for printing
• Mapped to the '+' operator
• Also called when the object is a parameter in
a print() or println() method
• There is a default toString method, but it's
better if we write our own
Rectangle.java
public String toString()
{
String result = "";
result += "length: " + length + "\n";
result += "width: " + width;
return (result);
}
Rectangle r = new Rectangle (2,3);
System.out.println (r);
length: 2
width: 3
toString and Program 4
• Should be included as part of the Card
class
• Return a String that contains the face
and suit of the card
• Examples:
– Ace of Spades
– 4 of Diamonds
– Queen of Hearts
The Modifier static
• In the method heading, specifies that the
method can be invoked by using the name of
the class
– no object has to be created in order to use the
method
– can't call a non-static method from a static method
– can't access non-static variables from a static
method
• If used to declare data member, data member
invoked by using the class name
– no object has to be created in order to use the
variables
static and Program 4
public class Card
{
public static final int ACE = 14;
Card.ACE
public class BlackjackGame
{
public static int calcPoints (Card card)
BlackjackGame.calcPoints
static Variables
• Shared among all objects of the class
• Memory created for static variables when
class is loaded
– memory created for instance variables (non-static)
when an object is instantiated (using new)
• If one object changes the value of the static
variable, it is changed for all objects of that
class
public class Illustrate
Illustrate obj1 = new Illustrate(3);
{
private int x;
(pg.static
421)int y;
Illustrate obj2 = new Illustrate(5);
public
private static int count;
Illustrate Class
public Illustrate()
{
x = 0;
}
public Illustrate (int a)
{
x = a;
}
y
count
01
0
1
obj1
x
3
x
5
obj2
public static void incrementCount()
{
count++;
Illustrate.incrementCount();
}
}
Illustrate.y++;
Thinking about Blackjack
• We know how to represent one card
• How do we represent a deck of 52
cards? 52 separate variables?
Card aceOfSpades;
Card 2OfSpades;
Card 3OfSpades;
...
Card[] deck;
Arrays
0
1
2
• An array is a list of values that can be
represented by one variable
• Members of an array must all have the same
data type
• Each value is stored at a specific, numbered
position in the array
– the number corresponding to each position is
called an index or subscript
• All arrays have a length
– number of elements the array can hold
3
Declaring Arrays
The array (element)
data type
0
1
2
Empty square brackets
type[] name;
The array (variable) name
Creates a reference variable called name that
can point to an array of type elements.
3
Declaring Arrays
0
1
2
Examples
// array of counters (integers)
int[] counter;
// array of characters
char[] characterSet;
// array of grades (doubles)
double[] grade;
counter
characterSet
grade
3
Instantiating Arrays
0
1
2
3
You must instantiate (create) arrays
– the size of an array is typically not known
before run time
The assignment operator
The array
(variable) name
The new operator
name = new type[size];
The array (element)
data type
The number of
elements
Instantiating Arrays
0
1
2
3
Examples
// instantiate an array of counters
counter = new int[5];
0
1
0 <= index < size
2
3
4
// instantiate the array of grades
numStudents = 10;
grade = new double[numStudents];
counter
Declaration and
Instantiation
0
1
2
type[] name = new type[size];
Declaration
Instantiation
3
Arrays of Objects
• Can use arrays to manipulate objects
• Create array of objects
classname[] array = new classname[size];
• Must instantiate each object in array
for(int j=0; j <array.length; j++) {
array[j] = new classname();
}
Example
0
1
int[] num = new int[5];
2
3
Array Access
0
1
2
3
Examples
double score[] = new score[3];
score[0] = 98.3;
score[1] = 57.8;
score[2] = 93.4;
averageScore = (score[0]+score[1]+score[2])/3;
numStudents = 3;
often use loops for access
totalScore = 0;
for (int i = 0; i < numStudents; i++) {
totalScore += score[i];
}
averageScore = totalScore/numStudents;
Array Length
0
1
2
Arrays have length
– an internal variable called length
– number of elements in array
– access the length variable using the “dot’
notation (arrayname.length)
// loop through the array of test scores
sumOfScores = 0;
for (int i=0; i<scores.length; i++) {
sumOfScores += scores[i];
}
3
Initializing Arrays
0
1
2
3
• Array elements are variables too!
– if you don’t initialize, the contents are
undefined
• When and how?
– if you don’t yet know the size
• initialize at run time, typically with a loop
– if you know how many elements
• perhaps use an initializer list
int counter[] = {0, 0, 0, 0, 0};
char[] characterSet = {‘a’,’b’,’c’}; // etc.
Initializer Lists
0
1
2
• Lists the initial value for the elements of an
array
• Items are separated by commas and the list
is in braces {}
• The size of the array is determined by the
number of items in the list
int[] scores = {87, 98, 45};
• Can only be used in the same statement as
declaring the array
NOT int[] scores;
scores = {87, 98, 45};
3
The Reference this
• Reserved word
• Refers to instance variables and
methods of a class
• Allows you to distinguish between
member variables and local variables
with the same name
Rectangle.java
public class Rectangle
{
private int length;
private int width;
public Rectangle (int length, int width)
{
this.length = length;
this.width = width;
}
this and Program 4
public class Card
{
public Card (int face, int suit)
{
}
If member variables were named face and suit, how can
we assign the member variable face the value of the
formal parameter face?
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
object where actual data is stored
– both formal and actual parameter refer to
same object
Passing Reference
Variables
And Program 4
public class BlackjackGame
{
public static int calcPoints(Card card)
{
}
}
Card card1 = new Card (2, Card.HEARTS);
int points = BlackjackGame.calcPoints(card1);
card1
face
2
suit
0
card
points
2
Next Time in COMP 14
• Arrays
• Reading Assignment: Ch 9 (pgs. 467491)