CS 180 Problem Solving and Object Oriented Programming Fall 2010 hmp://www.cs.purdue.edu/homes/apm/courses/cs180fall2010/ This Week: Notes for Week 7: Oct 4 8, 2010 Aditya Mathur Department of Computer Science Purdue University West LafayeMe, IN, USA 10/4 10/6 1. Exam 1: Performance 2. Project 1: Performance 3. Feedback for Week 6 4. Arrays 5. Demo 6. Incremental program development 7. MulW dimensional arrays 8. Visual depicwon of arrays
Readings and Exercises for Week 7 Readings: Chapter 6: 6.1, 6.2, 6.3, 6.4 Exercises: 6.3, 6.4, 6.5, 6.7 Aditya Mathur. CS 180. Fall 2010. Week 7 2
Special help session Thursday Oct 7, 5 7pm: Special help session in the B158 Sunday October 10: No help session. Enjoy your break! Aditya Mathur. CS 180. Fall 2010. Week 7 3
Special class Sunday October 17: 4 5:30pm For those who have not been able to perform well on Exam 1 and/or Project 1. Send me email if you wish to amend. Bring your laptops. Aditya Mathur. CS 180. Fall 2010. Week 7 4
Lunch meewng When: Thursday October 7, 2010. Noon 1:30pm Where: Ford Dining Hall Meet: Upstairs in the Ford dining hall AMendees: All who signed up for September 30 and October 7 Look forward to seeing you! Aditya Mathur. CS 180. Fall 2010. Week 7 5
Performance: Exam 1 Overall: Count: 231 Average: 393.3/480 Max Score: 480 obtained by 11 students Median: 417.6 Standard deviawon: 78.2 Part B: Count: 231 Average: 59.7 Max Score: 70/70 scored by 40 students Median: 63.0 Standard deviawon: 11.95 Aditya Mathur. CS 180. Fall 2010. Week 7 6
Performance: Exam 1: Histogram Aditya Mathur. CS 180. Fall 2010. Week 7 7
Exam 1: Common mistakes: Q1 Incorrect types for coordinates (int instead of float or double) 3 to 5 points Incorrect or forgomen formadng 3 points Code in main() method instead of in constructor 2 points Incorrect coding of the distance formula 10 to 20 points Aditya Mathur. CS 180. Fall 2010. Week 7 8
Exam 1: Common mistakes: Q2 Incorrect random number generawon ( 2 to 15 points) Minor syntax errors ( 1 to 2 points). Code in main() instead of constructor ( 3 points). Incorrect datatype for min, max ( 2 points) Incorrect class structure, like constructor inside main() ( 2 to 5 points) Not *reading* min and max from user ( 5 points) Incorrect if condiwons ( 2 to 5 points) Aditya Mathur. CS 180. Fall 2010. Week 7 9
Performance: Project 1 Total graded: 222 Average: 60.7 Max score: 64 by 81 students 59 63: 105 students Median: 62 Standard deviawon: 7.23 Aditya Mathur. CS 180. Fall 2010. Week 7 10
Robots in labs Please take a survey in this week s lab Please do not toast us! The robots were intended to give you some thrill and help in understanding the challenges of programming embedded systems. Unfortunately, the Ridge Sok robots turned out to be unreliable devices! Aditya Mathur. CS 180. Fall 2010. Week 7 11
Feedback for Week 6 Aditya Mathur. CS 180. Fall 2010. Week 7 12
Q1. The lab exercises were useful (Use scale of 1 10: 10 most useful, 1 not useful at all) (a) 8 10 (b) 4 7 (c) 1 3 (d) Missed Week 6 lab Aditya Mathur. CS 180. Fall 2010. Week 7 13
Q2. The recitawon exercises were useful (Use scale of 1 10: 10 most useful, 1 not useful at all) (a) 8 10 (b) 4 7 (c) 1 3 (d) Missed 6 recitawon Aditya Mathur. CS 180. Fall 2010. Week 7 14
Q3. The recitawon instructor was helpful. (Use scale of 1 10: 10 most helpful, 1 not helpful at all) (a) 8 10 (b) 4 7 (c) 1 3 (d) Missed week 6 recitawon Aditya Mathur. CS 180. Fall 2010. Week 7 15
Q4 Exam 1 was (a) Very easy (b) Somewhat easy (c) Somewhat tough (d) Tough (e) Very tough Aditya Mathur. CS 180. Fall 2010. Week 7 16
Q5. I have completed Project 2 (a) Yes (b) Nearly complete (c) Not started Aditya Mathur. CS 180. Fall 2010. Week 7 17
Q6. So far I am liking the course (a) A lot (b) Somewhat (c) Not sure Aditya Mathur. CS 180. Fall 2010. Week 7 18
Arrays Aditya Mathur. CS 180. Fall 2010. Week 7 19
Arrays: What are these? A homogeneous collecwon of variables or objects. All elements of an array are of the same type. Examples: Array of integers where each integer represents the age of a pawent. Array of cars where each element of the array denotes a specific car. Array of flowers where each element of the array denotes a flower. Aditya Mathur. CS 180. Fall 2010. Week 7 20
Arrays: When to use? When there is a need to retain data in memory for efficient processing. Data is created once and used many Wmes. Examples: Array of flights: Search for a specific flight Array of cars: Search for a specific car, or find the average price. Array of laptops: find the cheapest laptop Aditya Mathur. CS 180. Fall 2010. Week 7 21
Declaring an Array Indicates age is an array variable int [] age; /* age refers to an array of integers; e.g. age of people in a database*/ double [] weight; /* weight refers to an array of doubles; e.g. weights of items shipped*/ String [] name; /* name refers to an array of elements each of type String; e.g., names of people in a database*/ Aditya Mathur. CS 180. Fall 2010. Week 7 22
Declaring an Array: of objects Bird [] bird; /* Bird refers to a class; bird is an array where each element is an object of type Bird. */ Aircrak [] fleet; /* Aircrak refers to a class; fleet is an array where each element is an object of type Aircrak. */ Aditya Mathur. CS 180. Fall 2010. Week 7 23
CreaWng an Array int [] age=new int[10]; /* age is an array of 10 elements each of type int*/ double [] weight=new double[100]; /* weight is an array of 100 elements each of type double*/ String [] name=new String[15]; /* name is an array of 15 elements each of type String*/ Aircrak [] fleet=new Aircrak[150]; /* fleet is an array of 150 elements each of type Aircrak*/ Aditya Mathur. CS 180. Fall 2010. Week 7 24
Accessing an array element: general syntax Name of the array Index, starts from 0, must be an int Examples: name [expression] age[i]; // 0<=i<10 fleet[k]; // 0<=k<150 weight[i+j]; // 0<=(i+j)<100 Note: First element of an array is located at index 0. Aditya Mathur. CS 180. Fall 2010. Week 7 25
Accessing an array element int [] age=new int[10]; int p= age[5]; /* p gets element at index 5 of array age*/ double [] weight=new double[100]; double hisweight=weight[i]; /* hisweight gets the element of weight at index i*/ Aircrak [] fleet=new Aircrak[150]; Aircrak rental=fleet[k]/* rental gets the element of fleet located at index k */ Aditya Mathur. CS 180. Fall 2010. Week 7 26
Assigning a value to an array element int [] age=new int[10]; age[i]=15; /* (i+1) th element of age becomes 15. */ int [] age={ 15, 20, 30} // All elements iniwalized double [] weight=new double[100]; weight[k]=weight[k] 10; /* (k+1) th element of the weight is decremented by 10.*/ Aircrak [] fleet=new Aircrak[150]; fleet[i]=new Aircrak(); /* (i+1) th element of fleet gets a new Aircrak */ Aditya Mathur. CS 180. Fall 2010. Week 7 27
IteraWng through elements of an array In many problems we need to iterate through all or a few of the elements of an array. Such an iterawon is accomplished by using a for or a while loop. Aditya Mathur. CS 180. Fall 2010. Week 7 28
Problem: Find average int agesum=0; // IniWalize sum of all ages int [] age=new int[10]; // Create array of int to hold ages for( int i=0; i<age.length; i++){ agesum=agesum+age[i]; // Accumulate ages } double average=agesum/(double)age.length; Aditya Mathur. CS 180. Fall 2010. Week 7 29
Problem: Search in an array String [] wlist={"emilio", "Semion", "Osama"}; Scanner s=new Scanner (System.in); String wanted=s.next(); // Get name to be searched boolean found=false; // Not yet found int next=0; // Points to the first element in wanted list while(next<wlist.length &&!found) { if(wanted.equals(wlist[nextitem])) // Compare found=true; // If equal then we have found the wanted! else next++; // else point to the next item on the list }//End of loop Aditya Mathur. CS 180. Fall 2010. Week 7 30
Problem: Search in an array if(found) System.out.println(wanted+ " exists in database"); else System.out.println(wanted+ " not in database") } // End of program Aditya Mathur. CS 180. Fall 2010. Week 7 31
Problem: Statement A plant biology lab maintains a collecwon of leaves. The lab director wishes to create a simple database that contains several entries. Each entry is a plant name, type of its leaf, and a brief descripwon of the leaf in the collecwon. Example: WhitePine Needle NA Heather Compound NA Write a program that reads data from a file as menwoned above and allows a user to search for a tree in the database. Aditya Mathur. CS 180. Fall 2010. Week 7 32
Problem: Understanding A plant biology lab maintains a collecwon of leaves. From where can my program read the leaf data? If it is in a file, then what is the name of that file? The lab director wishes to create a simple database that contains several entries. How much data is available? Write a program that reads data from a file as menwoned above and allows a user to search for a tree in the database. In what form will the user input a request? Aditya Mathur. CS 180. Fall 2010. Week 7 33
Java program for plant biology lab. Incremental stepwise development! Aditya Mathur. CS 180. Fall 2010. Week 7 34
Tasks 1. Read plant collecwon data from a file 2. Provide search service to the user 3. Exit with a bye bye message when done. Aditya Mathur. CS 180. Fall 2010. Week 7 35
Let us assume. 1. LeafCollecWon class is available 2. It provides the following methods: createcollec?on() searchservice() 3. Leaf class is available. It provides the following methods: public void gettree(); public void getleaftype(); public void getdescrip?ontype(); Why did we make the above assumpwons? Aditya Mathur. CS 180. Fall 2010. Week 7 36
Overall design: Classes LeafCollecWonServer Main server Ini?ates ac?ons Uses LeafCollecWon public void createcollec?on(); public void (); Leaf private String parentplant; private String leaftype; private String leafdescripwon; public void gettree(); public void getleaftype(); public void getdescrip?ontype(); Uses Aditya Mathur. CS 180. Fall 2010. Week 7 37
LeafCollecWonServer Back to the Java program. Version 1.0. Aditya Mathur. CS 180. Fall 2010. Week 7 38
LeafCollecWon: Design This is a class. Provides two methods: createcollec?on() searchservice() But before we can write these methods we must have a way to read from a file and save in memory all the data about the collecwon! QuesWon: How should we store leaf collecwon data? Recall: For each leaf, we have its parent tree, its type, and its descrip?on. Aditya Mathur. CS 180. Fall 2010. Week 7 39
LeafCollecWon: Design QuesWon QuesWon: How should we store leaf collecwon data? Recall: For each leaf, we have its parent tree, its type, and its descrip?on. Answer:?? Aditya Mathur. CS 180. Fall 2010. Week 7 40
LeafCollecWon Back to the Java program. Version 2.0. Aditya Mathur. CS 180. Fall 2010. Week 7 41
Leaf: Design: AMributes Recall, for each leaf, we have the following available data: Name of parent tree Name of the leaf DescripWon Aditya Mathur. CS 180. Fall 2010. Week 7 42
Leaf: Design: Methods Recall, for each leaf, we have the following available data: public String getleafname(); public String gettreename(); public String getdsecripwon(); Aditya Mathur. CS 180. Fall 2010. Week 7 43
Leaf class Back to the Java program. Version 3.0. Aditya Mathur. CS 180. Fall 2010. Week 7 44
Arrays: Visual representawon Aditya Mathur. CS 180. Fall 2010. Week 7 45
Single dimensional array: Example 1 int [] cloudydays=new int [12] // average cloudy days/month Anchorage, Alaska 0 1 2 3 4 5 6 7 8 9 10 11 [19 18 18 18 20 20 22 21 21 21 20 21 ] Index Data cloudydays[0] cloudydays[5] cloudydays[11] Aditya Mathur. CS 180. Fall 2010. Week 7 46
Single dimensional array: Example 2: DeclaraWon Car [] carstock=new Car [5] // Cars at a dealership public class Car{ String make; // e.g. Ford String model; // e.g. Fusion int year; // e.g. 2011 long msrp; // e.g. US$23145 Picture carpic; } Aditya Mathur. CS 180. Fall 2010. Week 7 47
Single dimensional array: Example 2: Visual Car [] carstock=new Car[5] // Cars at a dealership CS180 Dealership in West LafayeMe 0 1 2 3 4 [ ] Index Object Reference {Ford, fusion, 2011, 23150 }... {Porsche, Boxster Spyder, 2011, 72000, } } carstock[0] carstock[4] Aditya Mathur. CS 180. Fall 2010. Week 7 48
Arrays: MulWdimensional Aditya Mathur. CS 180. Fall 2010. Week 7 49
Example 1 MEAN MONTHLY CLOUDY DAYS IN ARIZONA 0 1 2 3 4 0 1 J F 2 3 4 5 6 7 8 9 10 11 M A M J J A S O N D FLAGSTAFF 12 11 12 9 7 4 9 8 5 7 8 11 PHOENIX 10 9 8 6 3 2 4 4 3 4 6 9 TUCSON 10 9 9 6 4 3 9 7 4 5 6 10 WINSLOW 12 10 9 7 5 4 8 6 4 6 8 10 YUMA 9 6 6 4 2 1 3 3 2 3 5 8 rows columns int [][] cloudydays=new int [5][12] What is the value of cloudydays[1,8]? Aditya Mathur. CS 180. Fall 2010. Week 7 50
DeclaraWon Cars [] inventory=new Car [3][]; 3 rows and undefined number of columns Each row represents make of a car and column represents models 0 1 2 Chevy Honda Toyota 0 1 2 Avalanche Traverse Accord Fit Civic Camry Corolla Rav4 Aditya Mathur. CS 180. Fall 2010. Week 7 51
Arrays: Typical errors Index out of bounds [Run Wme error] int [] a=new int [10]; a[i]=x; // i is greater than 9 or less than 0 Element not iniwalized [Compile Wme error] String [] name; name[i]= Bob ; // element not iniwalized Aditya Mathur. CS 180. Fall 2010. Week 7 52
Week 7: October 4 8, 2010 Hope you enjoyed this week! QuesWons? Contact your recitawon instructor. Make full use of our office hours. Aditya Mathur. CS 180. Fall 2010. Week 7 53