Chapter 8 - One-dimensional arrays. 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.
Chapter 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 • 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 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; 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]; Array Organization 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 to 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] counts[1] counts[9] counts[10] // // // // // first variable in counts second variable in counts last variable in counts error – trying to access variable outside counts Expressions as Subscripts • Array subscripts not have to be constants • Array subscripts 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] Array Initialization • Arrays can be initialized by giving a list of their elements • If your list contains n elements the subscripts will range from to n – • You not need to allocate the array explicitly after it is initialized • Example: int [] primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29}; Initializing an Array of Strings final Sring[ ] NAME = { “Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}; // procedure that prints the day of week public void printName (int day, OutputBox out) { out.print(NAME[day – 1]); } Searching • This loop terminates as soon as it finds the value 90 stored in grades bool 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++; } 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++; } 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]; 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) { 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 SelectionSort Class – part 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 = findMinimum(A, i, size); swap(A, I, min); } } SelectionSort Class – part int findMinimum (double[] A, int i, int size) { int j, = 1; for (j= i + 1; j < size; j++) // A[min] = && A[j] > Ai) { A[j + 1] = A[j]; j ; } A[j + 1] = A[i]; } } } 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; } 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 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; { g.drawImage(mouse[ticker}, 70, 70); Timer.pause(sleepTime{ticker]); ticker = (ticker + 1) % NUMBER; } while (true); } } ... 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... 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... 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 to Array Subscripts • Arrays can contain any one type of value