Chap09
-
Upload
terry-yoast -
Category
Education
-
view
920 -
download
8
Transcript of Chap09
Java Programming: From Problem Analysis to Program Design, 3e
Chapter 9
Arrays
Java Programming: From Problem Analysis to Program Design, 3e 2
Chapter Objectives
• Learn about arrays
• Explore how to declare and manipulate data into arrays
• Understand the meaning of “array index out of bounds”
• Become familiar with the restrictions on array processing
Java Programming: From Problem Analysis to Program Design, 3e 3
Chapter Objectives (continued)
• Discover how to pass an array as a parameter to a method
• Discover how to manipulate data in a two-dimensional array
• Learn about multidimensional arrays
Java Programming: From Problem Analysis to Program Design, 3e 4
Array
• Definition: structured data type with a fixed number of elements
• Elements of an array are also called components of the array
• Every element is of the same type
• Elements are accessed using their relative positions in the array
Java Programming: From Problem Analysis to Program Design, 3e 5
One-Dimensional Arrays
Java Programming: From Problem Analysis to Program Design, 3e 6
One-Dimensional Arrays (continued)
Java Programming: From Problem Analysis to Program Design, 3e 7
One-Dimensional Arrays (continued)
•intExp = number of components in array >= 0•0 <= indexExp <= intExp
Java Programming: From Problem Analysis to Program Design, 3e 8
• Array num:int[] num = new int[5];
Arrays
Java Programming: From Problem Analysis to Program Design, 3e 9
Array List
Java Programming: From Problem Analysis to Program Design, 3e 10
Array List (continued)
Java Programming: From Problem Analysis to Program Design, 3e 11
Array List (continued)
Java Programming: From Problem Analysis to Program Design, 3e 12
Array List (continued)
Java Programming: From Problem Analysis to Program Design, 3e 13
Specifying Array Size During Program Execution
Java Programming: From Problem Analysis to Program Design, 3e 14
• The initializer list contains values, called initial values, that are placed between braces and separated by commas
• Here, sales[0]= 12.25, sales[1]= 32.50, sales[2]= 16.90, sales[3]= 23.00, and sales[4]= 45.68
Array Initialization During Declaration
Java Programming: From Problem Analysis to Program Design, 3e 15
Array Initialization During Declaration (continued)
• When declaring and initializing arrays, the size of the array is determined by the number of initial values within the braces
• If an array is declared and initialized simultaneously, we do not use the operator new to instantiate the array object
Java Programming: From Problem Analysis to Program Design, 3e 16
• Associated with each array that has been instantiated, there is a public (final) instance variable length
• The variable length contains the size of the array • The variable length can be directly accessed in a
program using the array name and the dot operator
int[] list = {10, 20, 30, 40, 50, 60};
Arrays and the Instance Variable length
Java Programming: From Problem Analysis to Program Design, 3e 17
Arrays and the Instance Variable length (continued)
• This statement creates the array list of six components and initializes the components using the values given– Here list.length is 6
int[] numList = new int[10];
• This statement creates the array numList of 10 components and initializes each component to 0
Java Programming: From Problem Analysis to Program Design, 3e 18
• The value of numList.length is 10 numList[0] = 5;numList[1] = 10;numList[2] = 15;numList[3] = 20;
• These statements store 5, 10, 15, and 20, respectively, in the first four components of numList
• You can store the number of filled elements, that is, the actual number of elements, in the array in a variable, say numOfElement
• It is a common practice for a program to keep track of the number of filled elements in an array
Arrays and the Instance Variable length (continued)
Java Programming: From Problem Analysis to Program Design, 3e 19
• Loops used to step through elements in array and perform operations
int[] list = new int[100];int i;
for (i = 0; i < list.length; i++) //process list[i], the (i + 1)th //element of list
for (i = 0; i < list.length; i++) list[i] = console.nextInt();
for (i = 0; i < list.length; i++) System.out.print(list[i] + " ");
Processing One-Dimensional Arrays
Java Programming: From Problem Analysis to Program Design, 3e 20
Arrays (continued)
• Some operations on arrays:– Initialize – Input data– Output stored data– Find largest/smallest/sum/average of elements
double[] sales = new double[10];int index;double largestSale, sum, average;
Java Programming: From Problem Analysis to Program Design, 3e 21
Code to Initialize Array to Specific Value (10.00)
for (index = 0; index < sales.length; index++) sales[index] = 10.00;
Java Programming: From Problem Analysis to Program Design, 3e 22
Code to Read Data into Array
for (index = 0; index < sales.length; index++) sales[index] = console.nextDouble();
Java Programming: From Problem Analysis to Program Design, 3e 23
Code to Print Array
for (index = 0; index < sales.length; index++) System.out.print(sales[index] + " ");
Java Programming: From Problem Analysis to Program Design, 3e 24
Code to Find Sum and Average of Array
sum = 0;for (index = 0; index < sales.length; index++) sum = sum + sales[index];
if (sales.length != 0) average = sum / sales.length;else average = 0.0;
Java Programming: From Problem Analysis to Program Design, 3e 25
Determining Largest Element in Array
maxIndex = 0;
for (index = 1; index < sales.length; index++) if (sales[maxIndex] < sales[index]) maxIndex = index;
largestSale = sales[maxIndex];
Java Programming: From Problem Analysis to Program Design, 3e 26
Determining Largest Element in Array (continued)
Java Programming: From Problem Analysis to Program Design, 3e 27
Determining Largest Element in Array (continued)
Java Programming: From Problem Analysis to Program Design, 3e 28
Array Index Out of Bounds
• Array in bounds if:0 <= index <= arraySize – 1
• If index < 0 or index > arraySize:
ArrayIndexOutOfBoundsException exception is thrown
• Base address: memory location of first component in array
Java Programming: From Problem Analysis to Program Design, 3e 29
Declaring Arrays as Formal Parameters to Methods
• A general syntax to declare an array as a formal parameter dataType[] arrayName
public static void arraysAsFormalParameter(int[] listA, double[] listB, int num){ //...}int[] intList = new int[10];double[] doubleNumList = new double[15];int number;
arraysAsFormalParameter(intList, doubleNumList, number);
Java Programming: From Problem Analysis to Program Design, 3e 30
The Assignment Operators and Arrays
Java Programming: From Problem Analysis to Program Design, 3e 31
The Assignment Operators and Arrays (continued)
Java Programming: From Problem Analysis to Program Design, 3e 32
The Assignment Operators and Arrays (continued)
Java Programming: From Problem Analysis to Program Design, 3e 33
Relational Operators Arrays
• if (listA == listB)...- The expression listA == listB determines if the values of listA and listB are the same and thus determines whether listA and listB refer to the same array- To determine whether listA and listB contain the same elements, you need to compare them component by component - You can write a method that returns true if two int arrays contain the same elements
Java Programming: From Problem Analysis to Program Design, 3e 34
Relational Operators and Arrays (continued)
boolean isEqualArrays(int[] firstArray, int[] secondArray){ if (firstArray.length != secondArray.length) return false;
for (int index = 0; index < firstArray.length; index++) if (firstArray[index] != secondArray[index]) return false; return true;}
if (isEqualArrays(listA, listB))...
Java Programming: From Problem Analysis to Program Design, 3e 35
Arrays as Parameter Methods
Java Programming: From Problem Analysis to Program Design, 3e 36
Methods for Array Processing
Java Programming: From Problem Analysis to Program Design, 3e 37
Methods for Array Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 38
Methods for Array Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 39
Methods for Array Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 40
Parallel Arrays
• Arrays are parallel if corresponding components hold related information
Java Programming: From Problem Analysis to Program Design, 3e 41
Arrays of Objects
• Can use arrays to manipulate objects
• Example: create array named array1 with N objects of type T
T[] array1 = new T[N] • Can instantiate array1 as follows:
for(int j=0; j <array1.length; j++)
array1[j] = new T();
Java Programming: From Problem Analysis to Program Design, 3e 42
Array of String Objects
String[] nameList = new String[5];
nameList[0] = "Amanda Green";
nameList[1] = "Vijay Arora";
nameList[2] = "Sheila Mann";
nameList[3] = "Rohit Sharma";
nameList[4] = "Mandy Johnson";
Java Programming: From Problem Analysis to Program Design, 3e 43
Array of String Objects (continued)
Java Programming: From Problem Analysis to Program Design, 3e 44
Clock[] arrivalTimeEmp = new Clock[100];
Arrays of Objects (continued)
Java Programming: From Problem Analysis to Program Design, 3e 45
Instantiating Array Objectsfor (int j = 0; j < arrivalTimeEmp.length; j++) arrivalTimeEmp[j] = new Clock();
Java Programming: From Problem Analysis to Program Design, 3e 46
arrivalTimeEmp[49].setTime(8, 5, 10);
Instantiating Array Objects (continued)
Java Programming: From Problem Analysis to Program Design, 3e 47
Arrays and Variable Length Parameter List
• The syntax to declare a variable length formal parameter (list) is:
dataType ... identifier
Java Programming: From Problem Analysis to Program Design, 3e 48
Arrays and Variable Length Parameter List (continued)
Java Programming: From Problem Analysis to Program Design, 3e 49
Arrays and Variable Length Parameter List (continued)
Java Programming: From Problem Analysis to Program Design, 3e 50
Arrays and Variable Length Parameter List (continued)
• A method can have both a variable length formal parameter and other formal parameters; consider the following method heading: public static void myMethod(String name, double num, int ... intList)
• The formal parameter name is of type String, the formal parameter num is of type double, and the formal parameter intList is of variable length
• The actual parameter corresponding to intList can be an int array or any number of int variables and/or int values
Java Programming: From Problem Analysis to Program Design, 3e 51
Arrays and Variable Length Parameter List (continued)
• A method can have at most one variable length formal parameter
• If a method has both a variable length formal parameter and other types of formal parameters, then the variable length formal parameter must be the last formal parameter of the formal parameter list
Java Programming: From Problem Analysis to Program Design, 3e 52
foreach loop
• The syntax to use this for loop to process the elements of an array is:
for (dataType identifier : arrayName) statements
•identifier is a variable and the data type of identifier is the same as the data type of the array components
Java Programming: From Problem Analysis to Program Design, 3e 53
foreach loop (continued)sum = 0; for (double num : list) sum = sum + num; • The for statement in Line 2 is read: for each num in list• The identifier num is initialized to list[0• In the next iteration, the value of num is list[1], and so
onfor (double num : numList){ if (max < num) max = num;}
Java Programming: From Problem Analysis to Program Design, 3e 54
Two-Dimensional Arrays
Java Programming: From Problem Analysis to Program Design, 3e 55
Two-Dimensional Arrays (continued)
Java Programming: From Problem Analysis to Program Design, 3e 56
double[][] sales = new double[10][5];
Two-Dimensional Arrays (continued)
Java Programming: From Problem Analysis to Program Design, 3e 57
• intExp1, intExp2 >= 0• indexExp1 = row position• indexExp2 = column position
Accessing Array Elements
Java Programming: From Problem Analysis to Program Design, 3e 58
Accessing Array Elements (continued)
Java Programming: From Problem Analysis to Program Design, 3e 59
• This statement declares and instantiates a two-dimensional array matrix of 20 rows and 15 columns
• The value of the expression:matrix.length is 20, the number of rows
Two-Dimensional Arrays and the Instance Variable length
Java Programming: From Problem Analysis to Program Design, 3e 60
Two-Dimensional Arrays and the Instance Variable length
(continued) • Each row of matrix is a one-dimensional array; matrix[0], in fact, refers to the first row
• The value of the expression:matrix[0].lengthis 15, the number of columns in the first row
• matrix[1].length gives the number of columns in the second row, which in this case is 15, and so on
Java Programming: From Problem Analysis to Program Design, 3e 61
Two-Dimensional Arrays: Special Cases
Java Programming: From Problem Analysis to Program Design, 3e 62
•Create columns
Two-Dimensional Arrays: Special Cases (continued)
Java Programming: From Problem Analysis to Program Design, 3e 63
Two-Dimensional Array Initialization During Declaration
Java Programming: From Problem Analysis to Program Design, 3e 64
• To initialize a two-dimensional array when it is declared
- The elements of each row are enclosed within braces and separated by commas- All rows are enclosed within braces
Two-Dimensional Array Initialization During Declaration (continued)
Java Programming: From Problem Analysis to Program Design, 3e 65
Two-Dimensional Array Initialization During Declaration (continued)
Java Programming: From Problem Analysis to Program Design, 3e 66
Two-Dimensional Arrays (continued)
• Three ways to process 2-D arrays– Entire array– Particular row of array (row processing)– Particular column of array (column processing)
• Processing algorithms similar to processing algorithms of one-dimensional arrays
Java Programming: From Problem Analysis to Program Design, 3e 67
Two-Dimensional Arrays: Processing
Initialization
for (row = 0; row < matrix.length; row++) for (col = 0; col < matrix[row].length; col++) matrix[row][col] = 10;
Printfor (row = 0; row < matrix.length; row++){ for (col = 0; col < matrix[row].length; col++) System.out.printf("%7d", matrix[row][col]); System.out.println();}
Java Programming: From Problem Analysis to Program Design, 3e 68
Inputfor (row = 0; row < matrix.length; row++) for (col = 0; col < matrix[row].length; col++) matrix[row][col] = console.nextInt();
Sum by Rowfor (row = 0; row < matrix.length; row++){ sum = 0; for (col = 0; col < matrix[row].length; col++) sum = sum + matrix[row][col]; System.out.println("Sum of row " + (row + 1) + " = "+ sum);}
Two-Dimensional Arrays: Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 69
Sum by Column for (col = 0; col < matrix[0].length; col++){ sum = 0; for (row = 0; row < matrix.length; row++) sum = sum + matrix[row][col]; System.out.println("Sum of column " + (col + 1) + " = " + sum);}
Two-Dimensional Arrays: Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 70
Largest Element in Each Row
for (row = 0; row < matrix.length; row++){ largest = matrix[row][0]; for (col = 1; col < matrix[row].length; col++) if (largest < matrix[row][col]) largest = matrix[row][col]; System.out.println("The largest element of row " + (row + 1) + " = " + largest);}
Two-Dimensional Arrays: Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 71
Largest Element in Each Column
for (col = 0; col < matrix[0].length; col++){ largest = matrix[0][col]; for (row = 1; row < matrix.length; row++) if (largest < matrix[row][col]) largest = matrix[row][col]; System.out.println("The largest element of col " + (col + 1) + " = " + largest);}
Two-Dimensional Arrays: Processing (continued)
Java Programming: From Problem Analysis to Program Design, 3e 72
Multidimensional Arrays
• Can define three-dimensional arrays or n-dimensional array (n can be any number)
• Syntax to declare and instantiate array
dataType[][]…[] arrayName = new dataType[intExp1][intExp2]…[intExpn];
• Syntax to access component
arrayName[indexExp1][indexExp2]…[indexExpn]
• intExp1, intExp2, ..., intExpn = positive integers• indexExp1,indexExp2, ..., indexExpn = non-negative integers
Java Programming: From Problem Analysis to Program Design, 3e 73
Loops to Process Multidimensional Arrays
double[][][] carDealers = new double[10][5][7];
for (i = 0; i < 10; i++) for (j = 0; j < 5; j++) for (k = 0; k < 7; k++) carDealers[i][j][k] = 10.00;
Java Programming: From Problem Analysis to Program Design, 3e 74
Programming Example: Text Processing
• Program: reads given text; outputs the text as is; prints number of lines and number of times each letter appears in text
• Input: file containing text to be processed
• Output: file containing text, number of lines, number of times letter appears in text
Java Programming: From Problem Analysis to Program Design, 3e 75
Programming Example Solution: Text Processing
• An array of 26 representing the letters in the alphabet
• Three methods– copyText – characterCount – writeTotal
• Value in appropriate index incremented using methods and depending on character read from text
Java Programming: From Problem Analysis to Program Design, 3e 76
Chapter Summary
• Arrays– Definition– Uses
• Different Arrays– One-dimensional– Two-dimensional– Multidimensional (n-dimensional)– Arrays of objects– Parallel arrays
Java Programming: From Problem Analysis to Program Design, 3e 77
Chapter Summary (continued)
• Declaring arrays• Instantiating arrays• Processing arrays
– Entire array– Row processing– Column processing
• Common operations and methods performed on arrays
• Manipulating data in arrays