Chapter 11 Lists and iteration. This chapter discusses n Managing collections of objects. n The...

Post on 26-Mar-2015

218 views 0 download

Tags:

Transcript of Chapter 11 Lists and iteration. This chapter discusses n Managing collections of objects. n The...

Chapter 11Lists and iteration

This chapter discusses Managing collections of objects. The fundamental container object is

called a list. Fundamental properties of lists. Specifications for a typical List class. How to perform an iterative process with

a list. The “while” statement and “for loop.”

Lists A list is a container that holds a finite

sequence of values all of the same type. List properties:

A list is finite, with zero or more elements. A list is a sequence. A list is homogeneous.

container: an object whose purpose is to contain other objects.

list: a container in which the elements are kept in sequence.

List specificationpublic class StudentList

A finite list of Students.

public StudentList ()

Create an empty StudentList.

public int size ()

Number of elements in List.

ensure:

this.size() >= 0

public boolean isEmpty ()

List contains no elements.

this.isEmpty()==(this.size()==0)

List specification (cont.)(a) StudentList sl; //initially

//null

(b) sl = new StudentList();

//Empty List

List specification (cont.)public Student get(int i)

The element at the specified position.

require:0<=i && i<this.size()

public void append (Student s)

Append the specified Student to the end of this List.

require:

s!=null

ensure:

this.size()==old.size+1

this.get(this.size()-1) == s Anything not mentioned does not change!

List specification (cont.)public void remove(int i)

Remove the element at the specified position.

require:

0<=i && i<this.size()

ensure:

this.size()==old.size-1

for i <= j < this.size()

this.get(j) == old.get(j+1)

public void set (int i, Student s)

Replace the element at the specified position with the specified Student.

require:

0 <= i && i < this.size()

s != null

ensure:

this.get(i) == s

List specification (cont.) Our specifications are fairly ubiquitous.

Just substitute the class name Student with another class. Change any reference to an Student object with a reference to an object of another class.

public NewObject get (int i)

public void append (NewObject n)

public void set (int i, NewObject n)

while statement iteration: a process in which an

operation is performed several times.

Syntax:while ( condition )

statement

while statement (cont.) The component statement is called

the body. Executing the body should have the

potential of changing the value of the condition.

It is possible that the condition of a “while” statement will remain true no matter now many time the body is executed. This is an “infinite loop.”

while loops and lists.

while( more list elements to process )process the next element

e.g.int index;index = 0;while (index < list.size()) {

process list.get(index);index = index + 1;

} We must guarantee that the while

condition eventually will become false.

while example - summing items of a Listpublic double finalAverage(StudentList students)

The average (mean) of the final exam grades of the specified Students.require: students.size() > 0

public int finalExam ()This Student’s grade on the final exam.

public double finalAverage(StudentList students) {

int i, sum, count;count = students.size();sum = 0;i = 0;while ( i < count) {

sum = sum + students.get(i).finalExam();i = i+1;

}return (double)sum / (double)count;

}

while example (cont.)

...

Summing selected elements of a List Consider what to do if some

students did not take the final exam.

Finding the minimum/** * The lowest final exam grades of the * specified Students. * require: * students.size() > 0 */public int minFinalExam (StudentList

students){ int i; int low; low = students.get(0).finalExam(); i=1; while ( i < students.size()){ if (students.get(i).finalExam()<low) low=students.get(i).finalExam(); i = i+1; }}

Determining if an object is in a Listpublic boolean contains (StudentList s) { int i; int length; length = this.size(); i=0; while ( i<length && get(i)!=s )

i = i+1; return i < length;}

What does “equal” mean? Two reference values are equal if

they refer to the same object.

What does “equal” mean? (cont.) Consider a Date class, that has

components day, month, and year. If distinct Date objects are created to

represent the same date, would these objects be “equal” ? Must they refer to the same object?

What does “equal” mean? (cont.) To determine if they are “equal” dates, we

must compare their day, month, and year.public boolean equals (Object obj){

Require.condition(obj

instanceof Date);

Date d = (Date)obj;

return this.year()==d.year() &&

this.month()==d.month() &&

this.day()==d.day();

}

// instanceof returns true if the object is

// an instance of

// the class

Two meanings of equality

indexOf method

public int indexOf (Student obj) {

int i;

int length;

length = this.size();

i = 0;

while (i < length && !obj.equals(get(i)))

i = i+1;

if ( i < length)

return i;

else

return -1;// item not found

}

Removing duplicatespublic void removeDuplicates(StudentList l) {

int i; //indexStudent item; //Check for duplicatesint j; //index

//invariant: i < ji = 0;while (i < list.size()) { item = list.get(i); j = i + 1;

while (j < list.size()) if (item.equals(list.get(j)))

list.remove(j); else

j = j+1;i = i+1;

}}

Loop structure

initializationwhile (condition) {body

}conclusion

for statement

for ( initialization; condition; updateStatement )

statement

for statement example

int i;

for ( i = 0; i < list.size(); i = i+1)

process list.get(i);

We’ve covered

How to use a List. summing elements. finding an element. removing elements.

while loops. Equality. The instanceof operator. for statements.

Glossary

Glosssary (cont.)