COMP 14 Introduction to Programming
E N D
Presentation Transcript
COMP 14Introduction to Programming Adrian Ilie July 18, 2005
Review Homework 5 • Algorithm • How to solve the problem without objects • not totally true, Strings are objects too • How to solve the problem with objects
Algorithm • Create teams • Create semifinal games • Output initial message • Get score of semifinal 1 • Determine finalist 1 • Get score of semifinal 2 • Determine finalist 2 • Create final game • Get score of final • Determine winner
Without objects String UNC=“UNC”; String Duke=“Duke”; String semi1=UNC + “ Vs. ” + Duke; String finalist1; … if(score1 > score2) finalist1=UNC; else finalist1=Duke;
Add method String UNC=“UNC”; String Duke=“Duke”; String semi1=UNC + “ Vs. ” + Duke; String finalist1; … finalist1=gameWinner(score1, score2, UNC, Duke);
With objects Team UNC=new Team(“UNC”); Team Duke=new Team(“Duke”); Game semi1=new Game(UNC, Duke); Team finalist1; … finalist1=semi1.gameWinner(score1, score2);
What’s going on? String name=“UNC” Team UNC Team Duke Game semi1 Team finalist1 Team objects String name=“Duke” Team team1 Team team2 Reference variables Game object
What is different? • We declare data inside objects, not directly in the main() method • The Strings become data members of the Team objects • We no longer need Strings for the games • If we don’t use objects, we duplicate the data. • The String for the game can be generated using the ones stored in the Teams. • The method gameWinner is a method associated to a particular game object • No need to pass the game as a parameter. • No need to pass the teams as parameters • Why does the code look almost the same? • Because Strings and Teams and Games are ALL classes/objects • Our classes are simply wrappers of Strings
Structure of a Team object • Data • String name • Methods • Constructors • toString()
Structure of a Game object • Data • Pointer to team1 (Team team1) • Pointer to team2 (Team team2) • Methods • Constructors • toString() • gameWinner() receives as parameter the score, and returns the pointer to the winner team.
Classes • Objects are collections of data and operations (methods) • We need to define the pattern/footprint of objects classes!!!
Writing classes public class ClassName { //Data members private int a; … //Constructor(s) public ClassName { //Code of the method } //other methods public return_type method1(type param1, type param2, …) { //Code of the method } }
Writing the main() public class MainClassName { //Data members Static BufferedReader keyboard=…; //main method public static void main(…) { //Code of the main method } //other methods public static return_type method1(type param1, …) { //Code of the method } }
This is wrong!! public class ClassName { //Data members private int a; … //Constructor(s) … OtherClass obj=new OtherClass(); … //other methods public return_type method1(type param1, …) { //Code of the method } } No instructions directly in the body of a class!!! They have to be inside a method Exception: initialization of a static variable (e.g. keyboard)
0 1 2 3 ReviewArrays can use variables and expressions as initial values • Declaration int[] counts; • Instantiation counts = new int[50]; • Initialization / Access for (int i=0; i<counts.length; i++) { counts[i] = 0; } • Initializer List • declaration, instantiation, and initialization double[] grades = {98.7, 72.4, 87.5}; int[] numbers = {num, num+1, num+2, num+3};
counter 0 temp 1 2 3 4 Arrays and Assignment int[] counter = new int[5]; int[] temp; temp = counter; doesn't make a copy of the array! temp == counteris true since the reference variables contain the same address
counter 0 0 temp 1 1 2 2 3 3 4 4 i Copying Arrays int[] counter = {1, 2, 3, 4, 5}; int[] temp = new int[counter.length]; 1 1 2 2 3 3 4 4 5 5 for (int i=0; i<counter.length; i++) { temp[i] = counter[i]; } 1 4 2 5 0 3
counter 0 0 temp 1 1 2 2 3 3 4 4 References and Assignment temp = counter; 1 1 2 2 3 3 4 4 5 5 Remember that arrays use reference variables just like objects.
counter 0 0 temp 1 1 2 2 3 3 4 4 References and null temp = null; null is a reserved word that means "empty/nothing” temp = null; 1 1 2 2 3 3 4 4 5 5 Remember that arrays use reference variables just like objects.
Arraysas Parameters • Entire array can be passed as a parameter • method can change elements of the array permanently • since we're passing a reference • Elements of an array can be passed as parameters, too • normal rules apply…
public class Tester { public static void swap (int[] scores, int x, int y) { int temp = scores[x]; scores[x] = scores[y]; scores[y] = temp; } public static void main (String[] args) { int[] grades = new int[4]; for (int i=0; i<grades.length; i++) { grades[i] = i*10; } swap (grades, 2, 3); } } scores[2]: 30 scores[3]: 30 temp : 20 scores[2]: 20 scores[3]: 30 temp : 20 scores[2]: 30 scores[3]: 20 temp : 20 grades[2]: 30 grades[3]: 20 grades[2]: 20 grades[3]: 30
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(); }
Example • 16 students • Each student: String name int age String major int year • Create arrays of all the data • Problem: print the names according toincreasing age • Analyze: without objects or with objects? Why?
To do • Homework 6 • Start with requirements 1 and 4. • Objects/classes. Exercise: • Create classes House and Roommate. • House will have an array of Roommates. • Create methods to set number of Roommates, etc (whatever you come up with) • Test the classes by writing calls to the methods in the main() method • Come to discuss problems