400 likes | 417 Views
This lesson covers static arrays, reserved word "this", and overloading methods in programming. Learn how to use static arrays and understand the concept of overloading methods.
E N D
COMP 14Introduction 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
ReviewScope 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() } }
ReviewOverloading 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 %%%%% % % %%%%%
publicvoid 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("%"); } for (int i =1; i <= width; i++) System.out.print("%"); System.out.println( );} length = 3, width = 8 %%%%%%%%% %%%%%%%%%
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? • what data types should we use? • Don't forget the visibility modifiers face suit if we use constants to represent the words, we can store the face and suit with integers
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 { private int x; public static int y; private static int count; public Illustrate() { x = 0; } public Illustrate (int a) { x = a; } public static void incrementCount() { count++; } } y 0 0 count obj1 3 x obj2 5 x Illustrate Class(pg. 421) Illustrate obj1 = new Illustrate(3); Illustrate obj2 = new Illustrate(5); 1 1 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;
2 3 0 1 Arrays • 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
0 1 2 3 Declaring Arrays The array (element) data type Empty square brackets type[] name; The array (variable) name Creates a reference variable called name that can point to an array of type elements.
counter characterSet 0 1 2 3 grade Declaring ArraysExamples // array of counters (integers) int[] counter; // array of characters char[] characterSet; // array of grades (doubles) double[] grade;
0 1 2 3 Instantiating Arrays 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
counter 0 1 2 3 4 0 1 2 3 Instantiating ArraysExamples // instantiate an array of counters counter = new int[5]; 0 <= index < size // instantiate the array of grades numStudents = 10; grade = new double[numStudents];
Declaration Instantiation 0 1 2 3 Declaration and Instantiation type[] name = new type[size];
Arrays of Objects • Can use arrays to manipulate objects • Create array of objects • Must instantiate each object in array classname[] array = new classname[size]; for(int j=0; j <array.length; j++) { array[j] = new classname(); }
0 1 2 3 Example int[] num = new int[5];
0 1 2 3 Array AccessExamples 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; totalScore = 0; for (int i = 0; i < numStudents; i++) { totalScore += score[i]; } averageScore = totalScore/numStudents; often use loops for access
0 1 2 3 Array Length 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]; }
0 1 2 3 Initializing Arrays • 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.
0 1 2 3 Initializer Lists • 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};
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
card card1 2 face 0 suit Passing Reference VariablesAnd Program 4 public class BlackjackGame { public static int calcPoints(Card card) { } } Card card1 = new Card (2, Card.HEARTS); int points = BlackjackGame.calcPoints(card1); points 2
Next Time in COMP 14 • Arrays • Reading Assignment: Ch 9 (pgs. 467-491)