chapter 8 one-dimensional arrays

29
Chapter 8 One-Dimensional Arrays Lecture Slides to Accompany An Introduction to Computer Science Using Java (2nd Edition) by S.N. Kamin, D. Mickunas, E. Reingold

Upload: beck-russell

Post on 30-Dec-2015

79 views

Category:

Documents


6 download

DESCRIPTION

Chapter 8 One-Dimensional Arrays. Lecture Slides to Accompany An Introduction to Computer Science Using Java (2nd Edition) by S.N. Kamin, D. Mickunas, E. Reingold. Chapter Preview. In this chapter we will: introduce the array as a structure for storing large amounts of data - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 8 One-Dimensional Arrays

Chapter 8One-Dimensional Arrays

Lecture Slides to Accompany

An Introduction to Computer Science Using Java (2nd Edition)

by

S.N. Kamin, D. Mickunas, E. Reingold

Page 2: Chapter 8 One-Dimensional Arrays

Chapter Preview

In this chapter we will:• introduce the array as a structure for storing

large amounts of data• discuss common array operations• introduce algorithms for searching and sorting

arrays• show how multiple images can be painted

from an array to use in programming simple animations

Page 3: Chapter 8 One-Dimensional Arrays

Array Declarations

• Arrays contain a fixed number of variables of identical type

• Array declaration and allocation are separate operations

• Declaration examples:int[] counts;

double[] scores;

String[] studentNames;

Page 4: Chapter 8 One-Dimensional Arrays

Array Allocation

• Arrays are allocated using the Java new operator

• The syntax is:

new type[size];• Examples:

counts = new int[10];

scores = new double[15];

studentNames = new String[10];

Page 5: Chapter 8 One-Dimensional Arrays

Array Organization

0 1 2 3 4 5 6 7 8 9

counts

• Each box is an int variable• The numbers on top are each variable’s

subscript or index• An array of size 10 has subscripts 0 to 9

Page 6: Chapter 8 One-Dimensional Arrays

Array Subscripts

• Arrays can contain any one type of value (either primitive values or references)

• Subscripts are used to access specific array values

• Examples:counts[0] // first variable in countscounts[1] // second variable in countscounts[9] // last variable in countscounts[10] // error – trying to access // variable outside counts

Page 7: Chapter 8 One-Dimensional Arrays

Expressions as Subscripts

• Array subscripts do not have to be constants• Array subscripts do need to be integer

expressions that evaluate to valid subscript values for the current array allocation

• Examples:counts[i]

counts[2*i]

counts[I/2]

Page 8: Chapter 8 One-Dimensional Arrays

Array Initialization

• Arrays can be initialized by giving a list of their elements

• If your list contains n elements the subscripts will range from 0 to n – 1

• You do not need to allocate the array explicitly after it is initialized

• Example:int [] primes =

{2, 3, 5, 7, 11, 13, 17, 19, 23, 29};

Page 9: Chapter 8 One-Dimensional Arrays

Initializing an Array of Strings

final Sring[ ] NAME = { “Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”};

// procedure that prints the day of weekpublic void printName (int day, OutputBox out) { out.print(NAME[day – 1]);}

Page 10: Chapter 8 One-Dimensional Arrays
Page 11: Chapter 8 One-Dimensional Arrays

Aliases

• It is possible to have two different variables refer to the same array

• When this happens these variables are called aliases• Creating aliases is not a good programming practice• Example of how it can happen:

int [ ] A, B;

B = new int [10];

A = B;

Page 12: Chapter 8 One-Dimensional Arrays
Page 13: Chapter 8 One-Dimensional Arrays

Loops and Array Processing

• Initializes counts to 0, 10, 20, … , 90for (int i=0; i < 10; i++) {

counts[i] = i * 10;

}

• Prints the contents of counts using length for (int i=0; i < counts.length; i++) {

out.println(counts[i]);

}

Page 14: Chapter 8 One-Dimensional Arrays

Extra Capacity Array

• Arrays cannot grow after they have been allocated

• You can allocate more space than you believe your application will need

• If you guess too low, you will still run out of space

• You do not need to use all the elements in an array (but total computer memory is finite)

Page 15: Chapter 8 One-Dimensional Arrays

Searching

• This loop terminates as soon as it finds the value 90 stored in gradesbool found = false;

int i = 0;

while (i < size && !found) {

// 90 is not in grades[0]..grades[i - 1]

if (grades[i] == 90)

found = true;

else

i++;

}

Page 16: Chapter 8 One-Dimensional Arrays
Page 17: Chapter 8 One-Dimensional Arrays

Processing Parallel Arrays

• This loop counts the number of students whose performance improved from the first test to the second

int improved = 0;

for (int i = 0; i < size; i++) {

if (grades1[i] < grades2[i])

improved++;

}

Page 18: Chapter 8 One-Dimensional Arrays
Page 19: Chapter 8 One-Dimensional Arrays

Arrays of Objects

• Arrays of objects are declared in the same manner as arrays of primitive variables

• Assuming that a class Student was declared elsewhere a client application could declare and allocate an array of 10 students using

Student[ ] students;

students = new Student[10];

Page 20: Chapter 8 One-Dimensional Arrays

Passing Arrays as Arguments

• When an array is passed as an argument to a method, what is passed is a pointer to the array, not a new array (arrays are passed by reference)

• This means that if the method makes changes to the array, these changes are still in effect when the method returns to its caller

• This is not true for primitive values which are passed by value and not by reference

• Method header example:public void read(Student[ ] students) {

Page 21: Chapter 8 One-Dimensional Arrays

Selection Sort

• Find the smallest element among the elements A[0]..A[n-1] and call it A[min]

• Swap A[0] and A[min] so A[0] contains the smallest element and A[1]..A[n-1] not sorted

• Now the smallest element among the elements A[1]..A[n-1] and call it A[min]

• Swap A[1] and A[min] so A[1] contains the second smallest element and A[2]..A[n-1] not sorted

• Proceed similarly for A[3], A[4], and so on

Page 22: Chapter 8 One-Dimensional Arrays

SelectionSort Class – part 1

public class SelectionSort {

public void selectionSort (double[] A, int size) {

for (int i=0; i < size; i++) {

// elements in A[0]..A[i–1] are less than

// elements in A[i]..A[size-1] and

// A[0]..A[i-1] are sorted

int min = findMinimum(A, i, size);

swap(A, I, min);

}

}

Page 23: Chapter 8 One-Dimensional Arrays

SelectionSort Class – part 2

int findMinimum (double[] A, int i, int size) {

int j, min = 1; for (j= i + 1; j < size; j++) // A[min] <= all elements in A[0]..A[j–1] if (A[j] < A[min]) min =j; return min; } void swap (double[] A, int I, int j) { double temp = A[i]; A[i] = A[j]; A[j] = temp; }}

Page 24: Chapter 8 One-Dimensional Arrays

Insertion Sort

• Iterate over subscripts 1 to n-1– At the ith step, shift the elements A[0]..A[i]

so that this part of the array is sorted

• Note: when the ith iteration begins elements A[0]..A[i – 1] are already sorted, so the only shifting is that required to insert A[i] into A[0]..A[i-1]

Page 25: Chapter 8 One-Dimensional Arrays

InsertionSort Classclass InsertionSort { public void InsertionSort (double[] A, int size) { int i,j; for (int i=1; i < size; i++) { double Ai = A[i]; j = j - 1; while (j >= 0 && A[j] > Ai) { A[j + 1] = A[j]; j--; } A[j + 1] = A[i]; } }}

Page 26: Chapter 8 One-Dimensional Arrays

Linear Search

int linearSearch (int[] A, int key)

int i;

for (i = 0; i < A.length; i++) {

// key not in A[0]..A[i - 1]

if (A[i] == key)

return i;

// key not in A

return –1;

}

Page 27: Chapter 8 One-Dimensional Arrays

Searching

• When searching for int values you can test for exact matches using (A[i] == key)

• Comparing two double values for equality will not always give a correct result

• A better comparison for doubles would be (Math.abs(A[i] – key) < epsilon)

• Epsilon should be as small a value as is acceptable for your application

Page 28: Chapter 8 One-Dimensional Arrays

Using Arrays in Animation

Image[] mouse = new Image[NUMBER];Int[] sleepTime = {1540, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240};public void show( ) { for (int i = 0; i < NUMBER; i++) mouse[i] = Toolkit.getDeafaultTool(). getImage(“images/T”+(i+1)+”gif); ticker = 0; do { g.drawImage(mouse[ticker}, 70, 70); Timer.pause(sleepTime{ticker]); ticker = (ticker + 1) % NUMBER; } while (true); }}

Page 29: Chapter 8 One-Dimensional Arrays