Chapter 10. Arrays. CS 180 Sunil Prabhakar Department of Computer Science Purdue University

Similar documents
Chapter 10. Arrays and Collections. Animated Version The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

Arrays and ArrayList. Array Basics

Objectives. After studying this chapter, Stdent should be able to

Objectives. After studying this chapter, Stdent should be able to

Arrays.

Chapter 9. Arrays. Declare and use an array of primitive data types in writing a program. Declare and use an array of objects in writing a program.

Recitation 3/27/2009. CS 180 Department of Computer Science, Purdue University

Arrays. What if you have a 1000 line file? Arrays

Arrays. Arrays. Wolfgang Schreiner Research Institute for Symbolic Computation (RISC) Johannes Kepler University, Linz, Austria

Strings and Arrays. Hendrik Speleers

CS Programming I: Arrays

EECS2030 Fall 2016 Preparation Exercise for Lab Test 2: A Birthday Book

10/30/2010. Introduction to Control Statements. The if and if-else Statements (cont.) Principal forms: JAVA CONTROL STATEMENTS SELECTION STATEMENTS

Arrays. Arrays (8.1) Arrays. One variable that can store a group of values of the same type. Storing a number of related values.

Lab Assignment Three

CONTENTS: Array Usage Multi-Dimensional Arrays Reference Types. COMP-202 Unit 6: Arrays

Birkbeck (University of London) Software and Programming 1 In-class Test Mar 2018

Arrays and Array Lists. CSE 1310 Introduction to Computers and Programming Vassilis Athitsos and Alexandra Stefan University of Texas at Arlington

COMP 250: Java Programming I. Carlos G. Oliver, Jérôme Waldispühl January 17-18, 2018 Slides adapted from M. Blanchette

Name CIS 201 Midterm II: Chapters 1-8

CS 61B Data Structures and Programming Methodology. June David Sun

Sequential Search (Searching Supplement: 1-2)

CS S-08 Arrays and Midterm Review 1

Computer Programming, I. Laboratory Manual. Experiment #3. Selections

Programming - 2. Common Errors

Arrays. Eng. Mohammed Abdualal

University of Cape Town ~ Department of Computer Science Computer Science 1015F ~ Test 2. Question Max Mark Internal External

McGill University School of Computer Science COMP-202A Introduction to Computing 1

Jump Statements. The keyword break and continue are often used in repetition structures to provide additional controls.

Arrays. Weather Problem Array Declaration Accessing Elements Arrays and for Loops Array length field Quick Array Initialization Array Traversals

University of Palestine. Mid Exam Total Grade: 100

Array. Prepared By - Rifat Shahriyar

CS5000: Foundations of Programming. Mingon Kang, PhD Computer Science, Kennesaw State University

CONTENTS: Arrays Strings. COMP-202 Unit 5: Loops in Practice

Last Class. Introduction to arrays Array indices Initializer lists Making an array when you don't know how many values are in it

Arrays and Pointers (part 2) Be extra careful with pointers!

Condi(onals and Loops

Arrays and Pointers (part 2) Be extra careful with pointers!

CSE 142, Autumn 2007 Midterm Exam, Friday, November 2, 2007

09/08/2017 CS2530 INTERMEDIATE COMPUTING 9/8/2017 FALL 2017 MICHAEL J. HOLMES UNIVERSITY OF NORTHERN IOWA TODAY S TOPIC: Exceptions and enumerations.

Midterm I - CSE11 Fall 2013 CLOSED BOOK, CLOSED NOTES 50 minutes, 100 points Total.

(A) 99 ** (B) 100 (C) 101 (D) 100 initial integers plus any additional integers required during program execution

High Institute of Computer Science & Information Technology Term : 1 st. El-Shorouk Academy Acad. Year : 2013 / Year : 2 nd

Java Coding 3. Over & over again!

Programming Logic and Design Sixth Edition

Generics and Type Safety. CS 180 Sunil Prabhakar Department of Computer Science Purdue University

Jump Statements. The keyword break and continue are often used in repetition structures to provide additional controls.

Instructor: Eng.Omar Al-Nahal

Chapter 9 Introduction to Arrays. Fundamentals of Java

CS 170, Section /3/2009 CS170, Section 000, Fall

ECE 122. Engineering Problem Solving with Java

ECE 122. Engineering Problem Solving with Java

CS 113 MIDTERM EXAM 2 SPRING 2013

Lecture 07, Fall 2018 Wednesday September 19

Intermediate Programming

Example. Section: PS 709 Examples of Calculations of Reduced Hours of Work Last Revised: February 2017 Last Reviewed: February 2017 Next Review:

EXAM Computer Science 1 Part 1

Introductory Programming Arrays, sections

Selected Questions from by Nageshwara Rao

(A) 99 (B) 100 (C) 101 (D) 100 initial integers plus any additional integers required during program execution

Read and fill in this page now. Your lab section day and time: Name of the person sitting to your left: Name of the person sitting to your right:

Fundamentals of Programming Data Types & Methods

Final. Your Name CS Fall 2014 December 13, points total Your Instructor and Section

CS 112 Introduction to Computing II. Wayne Snyder Computer Science Department Boston University

Classes and Objects Miscellany: I/O, Statics, Wrappers & Packages. CMSC 202H (Honors Section) John Park

Outline. Parts 1 to 3 introduce and sketch out the ideas of OOP. Part 5 deals with these ideas in closer detail.

Java How to Program, 10/e. Copyright by Pearson Education, Inc. All Rights Reserved.

Arrays. Outline 1/7/2011. Arrays. Arrays are objects that help us organize large amounts of information. Chapter 7 focuses on:

Arrays: An array is a data structure that stores a sequence of values of the same type. The data type can be any of Java s primitive types:

Collections, Maps and Generics

Crash Course in Java. Why Java? Java notes for C++ programmers. Network Programming in Java is very different than in C/C++

Building Java Programs

Object Oriented Programming. Java-Lecture 6 - Arrays

Data and Variables. Data Types Expressions. String Concatenation Variables Declaration Assignment Shorthand operators. Operators Precedence

CS 231 Data Structures and Algorithms, Fall 2016

Chapter 5. Selection Statements. Animated Version The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

Object Oriented Programming: In this course we began an introduction to programming from an object-oriented approach.

Practice Midterm 1. Problem Points Score TOTAL 50

CONDITIONAL EXECUTION: PART 2

COMP-202B - Introduction to Computing I (Winter 2011) - All Sections Example Questions for In-Class Quiz

A Beginner s Guide to Programming Logic, Introductory. Chapter 6 Arrays

Control Statements Loops

1B1a Arrays. Arrays. Indexing. Naming arrays. Why? Using indexing. 1B1a Lecture Slides. Copyright 2003, Graham Roberts 1

Why arrays? To group distinct variables of the same type under a single name.

Admin. CS 112 Introduction to Programming. Recap: Exceptions. Summary: for loop. Recap: CaesarFile using Loop. Summary: Flow Control Statements

CS 1063 Introduction to Computer Programming Midterm Exam 2 Section 1 Sample Exam

Announcements. Final exam. Course evaluations. No classes next week. Saturday Dec 15 10:20 am -- 12:20 pm Room: TBA. Wednesday November 28th

CS 112 Introduction to Programming

CS111: PROGRAMMING LANGUAGE II

York University Fall 2001 / Test #1 Department of Computer Science

MSc/ICY Software Workshop Exception Handling, Assertions Scanner, Patterns File Input/Output

false, import, new 1 class Lecture2 { 2 3 "Data types, Variables, and Operators" 4

Introduction to Programming Using Java (98-388)

Midterms Save the Dates!

Course Content. Objectives of Lecture 18 Black box testing and planned debugging. Outline of Lecture 18

EXAMINATIONS 2011 Trimester 2, MID-TERM TEST. COMP103 Introduction to Data Structures and Algorithms SOLUTIONS

Strings. Chuan-Ming Liu. Computer Science & Information Engineering National Taipei University of Technology Taiwan

Arrays. Chapter Arrays What is an Array?

CIS 1068 Design and Abstraction Spring 2017 Midterm 1a

Java Basic Programming Constructs

Transcription:

Chapter 10 Arrays CS 180 Sunil Prabhakar Department of Computer Science Purdue University

Objectives After this week, you should be able to Manipulate a collection of data values, using an array. Declare and use arrays Define a method that accepts an array as its parameter and a method that returns an array Understand two-dimensional arrays. Manipulate a collection of objects, using lists and maps

Array Basics Suppose your program needs to deal with 100 integers, 500 Account objects, 365 real numbers, etc., having a separate variable for each of these is cumbersome. Instead, we can use an array for each collection of similar values or objects. In Java, an array is an indexed collection of data values of the same type. 3

Arrays of Primitive Data Types 4

Arrays of Primitive Data Types Array Declaration <data type> [ ] <variable> //variation 1 <data type> <variable>[ ] //variation 2 4

Arrays of Primitive Data Types Array Declaration <data type> [ ] <variable> //variation 1 <data type> <variable>[ ] //variation 2 Array Creation <variable> = new <data type> [ <size> ] 4

Arrays of Primitive Data Types Array Declaration <data type> [ ] <variable> //variation 1 <data type> <variable>[ ] //variation 2 Array Creation <variable> = new <data type> [ <size> ] Example 4

Arrays of Primitive Data Types Array Declaration <data type> [ ] <variable> //variation 1 <data type> <variable>[ ] //variation 2 Array Creation <variable> = new <data type> [ <size> ] Example Variation 1 double[ ] rainfall; rainfall = new double[12]; 4

Arrays of Primitive Data Types Array Declaration <data type> [ ] <variable> //variation 1 <data type> <variable>[ ] //variation 2 Array Creation <variable> = new <data type> [ <size> ] Example Variation 1 Variation 2 double[ ] rainfall; rainfall = new double[12]; double rainfall [ ]; rainfall = new double[12]; 4

Arrays of Primitive Data Types Array Declaration <data type> [ ] <variable> //variation 1 <data type> <variable>[ ] //variation 2 Array Creation <variable> = new <data type> [ <size> ] Example Variation 1 Variation 2 double[ ] rainfall; rainfall = new double[12]; double rainfall [ ]; rainfall = new double[12]; An array is like an object! 4

Accessing Individual Elements Individual elements in an array accessed with the indexed expression. double[] rainfall = new double[12]; 5

Accessing Individual Elements Individual elements in an array accessed with the indexed expression. double[] rainfall = new double[12]; rainfall 0 1 2 3 4 5 6 7 8 9 10 11 The index of the first position in an array is 0. 5

Accessing Individual Elements Individual elements in an array accessed with the indexed expression. double[] rainfall = new double[12]; rainfall 0 1 2 3 4 5 6 7 8 9 10 11 The index of the first position in an array is 0. rainfall[2] This indexed expression refers to the element at position #2 5

Array Processing Sample1 double[] rainfall = new double[12]; double annualaverage, sum = 0.0; for (int i = 0; i < rainfall.length; i++) { rainfall[i] = Double.parseDouble( JOptionPane.showinputDialog(null, "Rainfall for month " + (i+1) ) ); sum += rainfall[i]; } annualaverage = sum / rainfall.length; 6

Array Processing Sample1 double[] rainfall = new double[12]; double annualaverage, sum = 0.0; for (int i = 0; i < rainfall.length; i++) { } rainfall[i] = Double.parseDouble( sum += rainfall[i]; JOptionPane.showinputDialog(null, "Rainfall for month " + (i+1) ) ); annualaverage = sum / rainfall.length; The public constant length returns the size of an array. 6

Array Processing Sample 2 double[] rainfall = new double[12]; String[] monthname = new String[12]; monthname[0] = "January"; monthname[1] = "February"; double annualaverage, sum = 0.0; for (int i = 0; i < rainfall.length; i++) { } rainfall[i] = Double.parseDouble( sum += rainfall[i]; JOptionPane.showinputDialog(null, "Rainfall for " + monthname[i] )); annualaverage = sum / rainfall.length; 7

Array Processing Sample 2 double[] rainfall = new double[12]; String[] monthname = new String[12]; monthname[0] = "January"; monthname[1] = "February"; double annualaverage, sum = 0.0; The same pattern for the remaining ten months. for (int i = 0; i < rainfall.length; i++) { } rainfall[i] = Double.parseDouble( sum += rainfall[i]; JOptionPane.showinputDialog(null, "Rainfall for " + monthname[i] )); annualaverage = sum / rainfall.length; 7

Array Processing Sample 2 double[] rainfall = new double[12]; String[] monthname = new String[12]; monthname[0] = "January"; monthname[1] = "February"; double annualaverage, sum = 0.0; The same pattern for the remaining ten months. for (int i = 0; i < rainfall.length; i++) { } rainfall[i] = Double.parseDouble( sum += rainfall[i]; JOptionPane.showinputDialog(null, "Rainfall for " + monthname[i] )); annualaverage = sum / rainfall.length; The actual month name instead of a number. 7

Array Processing Sample 3 Compute the average rainfall for each quarter. //assume rainfall is declared and initialized properly double[] quarteraverage = new double[4]; for (int i = 0; i < 4; i++) { sum = 0; for (int j = 0; j < 3; j++) { //compute the sum of sum += rainfall[3*i + j]; } quarteraverage[i] = sum / 3.0; } //one quarter //Quarter (i+1) average 8

Index out of bounds The index for an array a, must evaluate to a value between 0 and a.length-1. If it does not, then a run time exception called ArrayIndexOutOfBoundsException This does not need to be caught -- but will cause the program to terminate if not caught. 9

Array Initialization Like other data types, it is possible to declare and initialize an array at the same time. int[] number = { 2, 4, 6, 8 }; double[] samplingdata = { 2.443, 8.99, 12.3, 45.009, 18.2, 9.00, 3.123, 22.084, 18.08 }; String[] monthname = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; 10

Array Initialization Like other data types, it is possible to declare and initialize an array at the same time. int[] number = { 2, 4, 6, 8 }; double[] samplingdata = { 2.443, 8.99, 12.3, 45.009, 18.2, 9.00, 3.123, 22.084, 18.08 }; String[] monthname = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; number.length samplingdata.length monthname.length 4 9 12 10

Initializing arrays If we do not initialize values at creation time, then the elements are initialized to the default value of the corresponding type. It is also common to initialize an array using a for loop. 11

Variable-size Declaration In Java, we are not required to declare the size at compile time. The following code prompts the user for the size of an array and declares an array of the designated size: int size; int[] number; size= Integer.parseInt (JOptionPane.showInputDialog(null, number = new int[size]; "Size of an array:")); 12

Arrays of Objects In Java, in addition to arrays of primitive data types, we can declare arrays of objects An array of primitive data is a powerful tool, but an array of objects is even more powerful. The use of an array of objects allows us to model the application more cleanly and logically. 13

The Person Class We will use Person objects to illustrate the use of an array of objects. Person student; student = new Person( ); student.setname("doe ); student.setage(20); student.setgender('f'); System.out.println( "Name: " + student.getname() ); System.out.println( "Age : " + student.getage() ); System.out.println( "Sex : " + student.getgender() ); 14

The Person Class We will use Person objects to illustrate the use of an array of objects. Person student; student = new Person( ); student.setname("doe ); student.setage(20); student.setgender('f'); The Person class supports the set methods and get methods. System.out.println( "Name: " + student.getname() ); System.out.println( "Age : " + student.getage() ); System.out.println( "Sex : " + student.getgender() ); 14

Creating an Object Array - 1 Code Person[ ] person; person = new Person[20]; person[0] = new Person( ); 15

Creating an Object Array - 1 Code A Person[ ] person; person = new Person[20]; person[0] = new Person( ); person State of Memory After A is executed 15

Creating an Object Array - 1 Code A Person[ ] person; person = new Person[20]; person[0] = new Person( ); Only the name person is declared, no array is allocated yet. person State of Memory After A is executed 15

Creating an Object Array - 2 Code Person[ ] person; person = new Person[20]; person[0] = new Person( ); person State of Memory 16

Creating an Object Array - 2 Code B Person[ ] person; person = new Person[20]; person[0] = new Person( ); person 0 1 2 3 4 16 17 18 19 State of Memory After B is executed 16

Creating an Object Array - 2 Code B Person[ ] person; person = new Person[20]; person[0] = new Person( ); Now the array for storing 20 Person objects is created, but the Person objects themselves are not yet created. person 0 1 2 3 4 16 17 18 19 State of Memory After B is executed 16

Creating an Object Array - 3 Code Person[ ] person; person = new Person[20]; person[0] = new Person( ); person 0 1 2 3 4 16 17 18 19 State of Memory 17

Creating an Object Array - 3 Code C Person[ ] person; person = new Person[20]; person[0] = new Person( ); person 0 1 2 3 4 16 17 18 19 State of Memory Person After C is executed 17

Creating an Object Array - 3 Code C Person[ ] person; person = new Person[20]; person[0] = new Person( ); One Person object is created and the reference to this object is placed in position 0. person 0 1 2 3 4 16 17 18 19 State of Memory Person After C is executed 17

Person Array Processing Sample 1 Create Person objects and set up the person array. String int char name, inpstr; age; gender; for (int i = 0; i < person.length; i++) { name = inputbox.getstring("enter name:"); //read in data values age = inputbox.getinteger("enter age:"); inpstr = inputbox.getstring("enter gender:"); gender = inpstr.charat(0); person[i] = new Person( ); //create a new Person and assign values } person[i].setname ( name ); person[i].setage ( age ); person[i].setgender( gender ); 18

Person Array Processing Sample 2 Find the youngest and oldest persons. int minidx = 0; //index to the youngest person int maxidx = 0; //index to the oldest person for (int i = 1; i < person.length; i++) { if ( person[i].getage() < person[minidx].getage() ) { minidx = i; //found a younger person }else if(person[i].getage() > person[maxidx].getage(){ maxidx = i; //found an older person } } //person[minidx] is the youngest and person[maxidx] is the oldest 19

Object Deletion Approach 1 int delidx = 1; person[delidx] = null; person 0 1 2 3 A B C D 20

Object Deletion Approach 1 A int delidx = 1; person[delidx] = null; person 0 1 2 3 A B C D 20

Object Deletion Approach 1 A int delidx = 1; person[delidx] = null; Delete Person B by setting the reference in position 1 to null. person 0 1 2 3 A B C D 20

Object Deletion Approach 1 A int delidx = 1; person[delidx] = null; Delete Person B by setting the reference in position 1 to null. person person 0 1 2 3 0 1 2 3 A B C D A C D Before is executed A After is executed A 20

Object Deletion Approach 2 int delidx = 1, last = 3; person[delindex] = person[last]; person[last] = null; person 0 1 2 3 A B C D 21

Object Deletion Approach 2 A int delidx = 1, last = 3; person[delindex] = person[last]; person[last] = null; person 0 1 2 3 A B C D 21

Object Deletion Approach 2 A int delidx = 1, last = 3; person[delindex] = person[last]; person[last] = null; Delete Person B by setting the reference in position 1 to the last person. person 0 1 2 3 A B C D 21

Object Deletion Approach 2 A int delidx = 1, last = 3; person[delindex] = person[last]; person[last] = null; Delete Person B by setting the reference in position 1 to the last person. person person 0 1 2 3 0 1 2 3 A B C D A D C Before is executed A After is executed A 21

Person Array Processing Sample 3 Searching for a particular person. Approach 2 Deletion is used. int i = 0 while ( person[i]!= null &&!person[i].getname().equals( Doe") ) { } i++; if ( person[i] == null ) { //not found - unsuccessful search System.out.println("Doe was not in the array"); } else { //found - successful search System.out.println("Found Doe at position " + i); } 22

Array data type 23

Array data type An array with elements of type T is a new data type represented as T[ ] int [ ] age; double salary[ ]; Person student[ ]; age is of type int[] salary is of type double [] student is of type Person [] Each element of this array is of type T age[0], salary [0] are int data types student [1] is a Person object. 23

Passing Arrays to Methods - 1 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } 24

Passing Arrays to Methods - 1 Code A minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } At A before searchminimum arrayone State of Memory 24

Passing Arrays to Methods - 1 Code A minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } At A before searchminimum arrayone A. Local variable number does not exist before the method execution State of Memory 24

Passing Arrays to Methods - 2 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } The address is copied at B arrayone number State of Memory 25

Passing Arrays to Methods - 2 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } B The address is copied at B arrayone number State of Memory 25

Passing Arrays to Methods - 2 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } B The address is copied at B arrayone number State of Memory B. The value of the argument, which is an address, is copied to the parameter. 25

Passing Arrays to Methods - 2 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } B The address is copied at B arrayone number State of Memory B. The value of the argument, which is an address, is copied to the parameter. 25

Passing Arrays to Methods - 3 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } While at C inside the method arrayone number State of Memory 26

Passing Arrays to Methods - 3 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } C While at C inside the method arrayone number State of Memory 26

Passing Arrays to Methods - 3 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } C While at C inside the method State of Memory arrayone number C. The array is accessed via number inside the method. 26

Passing Arrays to Methods - 4 Code minone = searchminimum(arrayone); public int searchminimum(float[] number)) { } At D after searchminimum arrayone number State of Memory 27

Passing Arrays to Methods - 4 Code minone = searchminimum(arrayone); D public int searchminimum(float[] number)) { } At D after searchminimum arrayone number State of Memory 27

Passing Arrays to Methods - 4 Code minone = searchminimum(arrayone); D public int searchminimum(float[] number)) { } At D after searchminimum arrayone number State of Memory 27

Passing Arrays to Methods - 4 Code minone = searchminimum(arrayone); D public int searchminimum(float[] number)) { } At D after searchminimum arrayone number D. The parameter is erased. The argument still points to the same object. State of Memory 27

Arguments and return values An array can be returned by a method. The return type must be an array in this case. public int[ ] doublevalues(int [ ] inarray) An element can be passed to any method that accepts an argument of the base type of the array. double x[ ] = new double[5]; y = Math.exp(x[2]); 28

The main method Recall the only argument to main: public static void main(string[ ] args) The argument is an array of strings. Each element of this array is set to the words that follow the program name when executing: %java Test one two three In main: args[0] is one args[1] is two and args[2] is three. Also, args.length will be 3 for this case. 29

Two-Dimensional Arrays Two-dimensional arrays are useful in representing tabular information. 30

Two-Dimensional Arrays Two-dimensional arrays are useful in representing tabular information. 30

Two-Dimensional Arrays Two-dimensional arrays are useful in representing tabular information. 30

Two-Dimensional Arrays Two-dimensional arrays are useful in representing tabular information. 30

Declaring and Creating a 2-D Array 31

Declaring and Creating a 2-D Array Declaration <data type> [][] <variable> //variation 1 <data type> <variable>[][] //variation 2 31

Declaring and Creating a 2-D Array Declaration Creation <data type> [][] <variable> //variation 1 <data type> <variable>[][] //variation 2 <variable> = new <data type> [ <size1> ][ <size2> ] 31

Declaring and Creating a 2-D Array Declaration Creation <data type> [][] <variable> //variation 1 <data type> <variable>[][] //variation 2 <variable> = new <data type> [ <size1> ][ <size2> ] Example payscaletable 0 1 2 3 4 double[][] payscaletable; 0 1 payscaletable = new double[4][5]; 2 3 31

Accessing an Element An element in a two-dimensional array is accessed by its row and column index. 32

Accessing an Element An element in a two-dimensional array is accessed by its row and column index. 32

Sample 2-D Array Processing Find the average of each row. double[ ] average = { 0.0, 0.0, 0.0, 0.0 }; for (int i = 0; i < payscaletable.length; i++) { for (int j = 0; j < payscaletable[i].length; j++) { } average[i] += payscaletable[i][j]; } average[i] = average[i] / payscaletable[i].length; 33

Sample 2-D Array Processing Find the average of each column. double[ ] average = { 0.0, 0.0, 0.0, 0.0, 0.0 }; for (int i = 0; i < payscaletable.length; i++) { for (int j = 0; j < payscaletable[i].length; j++) { } } average[j] += payscaletable[i][j]; for (int i = 0; i < payscaletable [0].length; i++) average[i] = average[i] / payscaletable.length; 34

Sample 2-D Array Processing Find the average of each column -- alternative. double[ ] average = { 0.0, 0.0, 0.0, 0.0, 0.0 }; for (int i = 0; i < payscaletable [0].length; i++) { for (int j = 0; j < payscaletable.length; j++) { } average[i] += payscaletable[j][i]; } average[i] = average[i] / payscaletable.length; 35

Java Implementation of 2-D Arrays The sample array creation payscaletable = new double[4][5]; is really a shorthand for payscaletable = new double [4][ ]; payscaletable[0] = new double [5]; payscaletable[1] = new double [5]; payscaletable[2] = new double [5]; payscaletable[3] = new double [5];

Java Implementation payscaletable = new double[4][5]; 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; payscaletable 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; payscaletable 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; payscaletable 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double[ ][ ] payscaletable 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double[ ][ ] payscaletable double[ ] 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double double[ ][ ] payscaletable double[ ] 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double double[ ][ ] payscaletable double[ ] 0 1 2 3 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double double[ ][ ] payscaletable double[ ] 0 1 2 3 0 1 2 3 4 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double double[ ][ ] payscaletable double[ ] payscaletable[1] 0 1 2 3 0 1 2 3 4 37

Java Implementation payscaletable = new double[4][5]; payscaletable = new double [4]; payscaletable[0] = new double [5]; double double[ ][ ] payscaletable double[ ] payscaletable[1] 0 1 2 3 0 1 2 3 4 payscaletable[1][2] 37

Java Implementation payscaletable 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length payscaletable 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length 4 payscaletable 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length 4 payscaletable[1].length payscaletable 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length 4 payscaletable[1].length payscaletable payscaletable[1] 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length payscaletable[1].length 5 4 payscaletable payscaletable[1] 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length payscaletable[1].length 5 payscaletable[1][2].length 4 payscaletable payscaletable[1] 0 1 2 3 0 1 2 3 4 38

Java Implementation payscaletable.length payscaletable[1].length 5 payscaletable[1][2].length 4 payscaletable payscaletable[1] 0 1 2 3 0 1 2 3 4 payscaletable[1][2] 38

Java Implementation payscaletable.length payscaletable[1].length 5 payscaletable[1][2].length 4 ERROR! payscaletable payscaletable[1] 0 1 2 3 0 1 2 3 4 payscaletable[1][2] 38

Two-Dimensional Arrays 39

Two-Dimensional Arrays In Java, subarrays may have different lengths. 39

Two-Dimensional Arrays In Java, subarrays may have different lengths. Executing triangulararray = new double[4][ ]; for (int i = 0; i < 4; i++) triangulararray[i] = new double [i + 1]; results in an array that looks like: 39

Two-Dimensional Arrays In Java, subarrays may have different lengths. Executing triangulararray = new double[4][ ]; for (int i = 0; i < 4; i++) triangulararray[i] = new double [i + 1]; results in an array that looks like: triangulararray.length 39

Two-Dimensional Arrays In Java, subarrays may have different lengths. Executing triangulararray = new double[4][ ]; for (int i = 0; i < 4; i++) triangulararray[i] = new double [i + 1]; results in an array that looks like: triangulararray.length triangulararray[1].length 39

Limitation of Arrays Once an array object is created, its size is fixed -- it cannot be changed. If we need to store more elements that the size with which an array was created, we have to Create a new larger array Copy all elements from current to new array Change the reference to the new array Alternatively, we can use Lists or Maps. 40

Lists and Maps The java.util standard package contains different types of classes for maintaining a collection of objects. These classes are collectively referred to as the Java Collection Framework (JCF). JCF includes classes that maintain collections of objects as sets, lists, or maps. 41

Java Interface A Java interface defines only the behavior of objects It includes only public methods with no method bodies. It does not include any data members except public constants No instances of a Java interface can be created 42

The List interface JCF includes the List interface that supports methods to maintain a collection of objects as a linear list L = (l 0, l 1, l 2,..., l N ) We can add to, remove from, and retrieve objects in a given list. A list does not have a set limit to the number of objects we can add to it. 43

List Methods Here are five of the 25 list methods: boolean add ( Object o ) Adds an object o to the list void clear ( ) Clears this list, i.e., make the list empty Object get ( int idx ) Returns the element at position idx boolean remove ( int idx ) Removes the element at position idx int size ( ) Returns the number of elements in the list 44

Using Lists To use a list in a program, we must create an instance of a class that implements the List interface. Two classes that implement the List interface: ArrayList LinkedList The ArrayList class uses an array to manage data. The LinkedList class uses a technique called linked-node representation. 45

Sample List Usage Here's an example of manipulating a list: import java.util.*; List friends; Person person; friends = new ArrayList( ); person = new Person("jane", 10, 'F'); friends.add( person ); person = new Person("jack", 6, 'M'); friends.add( person ); Person p = (Person) friends.get( 1 ); 46

Sample List Usage Here's an example of manipulating a list: import java.util.*; List friends; Person person; friends = new ArrayList( ); Note: List is the interface, ArrayList implements it. person = new Person("jane", 10, 'F'); friends.add( person ); person = new Person("jack", 6, 'M'); friends.add( person ); Person p = (Person) friends.get( 1 ); 46

Sample List Usage Here's an example of manipulating a list: import java.util.*; List friends; Person person; friends = new ArrayList( ); Note: List is the interface, ArrayList implements it. person = new Person("jane", 10, 'F'); friends.add( person ); person = new Person("jack", 6, 'M'); friends.add( person ); Person p = (Person) friends.get( 1 ); Get returns an object of class Object -- need to typecast to Person. 46

JCF Maps JCF includes the Map interface that supports methods to maintain a collection of objects (key, value) pairs called map entries. key value k 0 v 0 k 1... k n v 1... v n 47

JCF Maps JCF includes the Map interface that supports methods to maintain a collection of objects (key, value) pairs called map entries. key value k 0 v 0 one entry k 1... k n v 1... v n 47

Map Methods Here are five of the 14 list methods: void clear ( ) Clears this list, i.e., make the map empty boolean containskey ( Object key ) Returns true if the map contains an entry with a given key Object put (Object key, Object value) Adds the given (key, value) entry to the map boolean remove ( Object key ) Removes the entry with the given key from the map int size ( ) Returns the number of elements in the map 48

Using Maps To use a map in a program, we must create an instance of a class that implements the Map interface. Two classes that implement the Map interface: HashMap TreeMap 49

Sample Map Usage Here's an example of manipulating a map: import java.util.*; Map catalog; catalog = new TreeMap( ); catalog.put("cs180", "Intro Java Programming"); catalog.put("cs348", "Database Design"); catalog.put("cs413", "Software Design for Mobile Devices"); if (catalog.containskey("cs101")) { System.out.println("We teach Java this semester"); } else { System.out.println("No Java courses this semester"); }

Problem Statement Write an AddressBook class that manages a collection of Person objects. An AddressBook object will allow the programmer to add, delete, or search for a Person object in the address book. 51

Overall Plan / Design Document Since we are designing a single class, our task is to identify the public methods. Public Method AddressBook add delete search Purpose A constructor to initialize the object. We will include multiple constructors as necessary. Adds a new Person object to the address book. Deletes a specified Person object from the address book. Searches a specified Person object in the address book and returns this person if found. 52

Development Steps We will develop this program in five steps: 1. Implement the constructor(s). 2. Implement the add method. 3. Implement the search method. 4. Implement the delete method. 5. Finalize the class. 53

Step 1 Design Start the class definition with two constructors The zero-argument constructor will create an array of default size The one-argument constructor will create an array of the specified size 54

Step 1 Code Program source file is too big to list here. From now on, we ask you to view the source files using your Java IDE. Directory: Chapter10/Step1 Source Files: AddressBook.java 55

Step 1 Test The purpose of Step 1 testing is to verify that the constructors work as expected. Argument to Constructor Negative numbers Purpose Test the invalid data. 0 Test the end case of invalid data. 1 Test the end case of valid data. >= 1 Test the normal cases. 56

Step 2 Design Design and implement the add method The array we use internal to the AddressBook class has a size limit, so we need consider the overflow situation Alternative 1: Disallow adds when the capacity limit is reached Alternative 2: Create a new array of bigger size We will adopt Alternative 2 57

Step 2 Code Directory: Chapter10/Step2 Source Files: AddressBook.java 58

Step 2 Test The purpose of Step 2 test is to confirm that objects are added correctly and the creation of a bigger array takes place when an overflow situation occurs. Test Sequence Create the array of size 4 Add four Person objects Add the fifth Person object Purpose Test that the array is created correctly. Test that the Person objects are added correctly. Test that the new array is created and the Person object is added correctly (to the new array). 59

Step 3 Design Design and implement the search method. loc = 0; while ( loc < count && name of Person at entry[loc] is not equal to the given search name ) { loc++; } if (loc == count) { foundperson = null; } else { foundperson = entry[loc]; } return foundperson; 60

Step 3 Code Directory: Chapter10/Step3 Source Files: AddressBook.java 61

Step 3 Test To test the correct operation of the search method, we need to carry out test routines much more elaborate than previous tests. Test Sequence Create the array of size 5 and add five Person objects with unique names. Search for the person in the first position of the array Search for the person in the last position of the array Search for a person somewhere in the middle of the array. Search for a person not in the array. Repeat the above steps with an array of varying sizes, especially the array of size 1. Repeat the testing with the cases where the array is not fully filled, say, array length is 5 and the number of objects in the array is 0 or 3. Purpose Test that the array is created and set up correctly. Here, we will test the case where the array is 100 percent filled. Test that the successful search works correctly for the end case. Test another version of the end case. Test the normal case. Test for the unsuccessful search. Test that the routine works correctly for arrays of different sizes. Test that the routine works correctly for other cases. 62

Step 4 Design Design and implement the delete method. boolean status; int loc; loc = findindex( searchname ); if ( loc is not valid ) { status = false; } else { //found, pack the hole replace the element at index loc+1 by the last element at index count; status = true; count--; //decrement count, since we now have one less element assert 'count' is valid; } return status; 63

Step 4 Code Directory: Chapter10/Step4 Source Files: AddressBook.java 64

Step 4 Test To test the correct operation of the delete method, we need to carry out a detailed test routine. 65

Step 4 Test To test the correct operation of the delete method, we need to carry out a detailed test routine. Test Sequence Create the array of size 5 and add five Person objects with unique names. Search for a person to be deleted next. Delete the person in the array Purpose Test the array is created and set up correctly. Here, we will test the case where the array is 100 percent filled. Verify that the person is in the array before deletion. Test that the delete method works correctly. Search for the deleted person. Test that the delete method works correctly by checking the value null is returned by the search. Attempt to delete a nonexisting person. Repeat the above steps by deleting persons at the first and last positions. Repeat testing where the array is not fully filled, say, an array length is 5 and the number of objects in the array is 0 or 3. Test that the unsuccessful operation works correctly. Test that the routine works correctly for arrays of different sizes. Test that the routine works correctly for other cases. 65

Step 5: Finalize 66

Step 5: Finalize Final Test 66

Step 5: Finalize Final Test Since the three operations of add, delete, and search are interrelated, it is critical to test these operations together. We try out various combinations of add, delete, and search operations. 66

Step 5: Finalize Final Test Since the three operations of add, delete, and search are interrelated, it is critical to test these operations together. We try out various combinations of add, delete, and search operations. Possible Extensions 66

Step 5: Finalize Final Test Since the three operations of add, delete, and search are interrelated, it is critical to test these operations together. We try out various combinations of add, delete, and search operations. Possible Extensions One very useful extension is scanning. Scanning is an operation to visit all elements in the collection. 66

Step 5: Finalize Final Test Since the three operations of add, delete, and search are interrelated, it is critical to test these operations together. We try out various combinations of add, delete, and search operations. Possible Extensions One very useful extension is scanning. Scanning is an operation to visit all elements in the collection. Scanning is useful in listing all Person objects in the address book. 66