Chap09

77
Java Programming: From Problem Analysis to Program Design, 3e Chapter 9 Arrays

Transcript of Chap09

Page 1: Chap09

Java Programming: From Problem Analysis to Program Design, 3e

Chapter 9

Arrays

Page 2: Chap09

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

Page 3: Chap09

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

Page 4: Chap09

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

Page 5: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 5

One-Dimensional Arrays

Page 6: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 6

One-Dimensional Arrays (continued)

Page 7: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 7

One-Dimensional Arrays (continued)

•intExp = number of components in array >= 0•0 <= indexExp <= intExp

Page 8: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 8

• Array num:int[] num = new int[5];

Arrays

Page 9: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 9

Array List

Page 10: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 10

Array List (continued)

Page 11: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 11

Array List (continued)

Page 12: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 12

Array List (continued)

Page 13: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 13

Specifying Array Size During Program Execution

Page 14: Chap09

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

Page 15: Chap09

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

Page 16: Chap09

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

Page 17: Chap09

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

Page 18: Chap09

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)

Page 19: Chap09

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

Page 20: Chap09

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;

Page 21: Chap09

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;

Page 22: Chap09

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();

Page 23: Chap09

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] + " ");

Page 24: Chap09

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;

Page 25: Chap09

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];

Page 26: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 26

Determining Largest Element in Array (continued)

Page 27: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 27

Determining Largest Element in Array (continued)

Page 28: Chap09

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

Page 29: Chap09

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);

Page 30: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 30

The Assignment Operators and Arrays

Page 31: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 31

The Assignment Operators and Arrays (continued)

Page 32: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 32

The Assignment Operators and Arrays (continued)

Page 33: Chap09

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

Page 34: Chap09

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))...

Page 35: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 35

Arrays as Parameter Methods

Page 36: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 36

Methods for Array Processing

Page 37: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 37

Methods for Array Processing (continued)

Page 38: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 38

Methods for Array Processing (continued)

Page 39: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 39

Methods for Array Processing (continued)

Page 40: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 40

Parallel Arrays

• Arrays are parallel if corresponding components hold related information

Page 41: Chap09

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();

Page 42: Chap09

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";

Page 43: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 43

Array of String Objects (continued)

Page 44: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 44

Clock[] arrivalTimeEmp = new Clock[100];

Arrays of Objects (continued)

Page 45: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 45

Instantiating Array Objectsfor (int j = 0; j < arrivalTimeEmp.length; j++) arrivalTimeEmp[j] = new Clock();

Page 46: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 46

arrivalTimeEmp[49].setTime(8, 5, 10);

Instantiating Array Objects (continued)

Page 47: Chap09

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

Page 48: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 48

Arrays and Variable Length Parameter List (continued)

Page 49: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 49

Arrays and Variable Length Parameter List (continued)

Page 50: Chap09

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

Page 51: Chap09

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

Page 52: Chap09

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

Page 53: Chap09

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;}

Page 54: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 54

Two-Dimensional Arrays

Page 55: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 55

Two-Dimensional Arrays (continued)

Page 56: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 56

double[][] sales = new double[10][5];

Two-Dimensional Arrays (continued)

Page 57: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 57

• intExp1, intExp2 >= 0• indexExp1 = row position• indexExp2 = column position

Accessing Array Elements

Page 58: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 58

Accessing Array Elements (continued)

Page 59: Chap09

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

Page 60: Chap09

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

Page 61: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 61

Two-Dimensional Arrays: Special Cases

Page 62: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 62

•Create columns

Two-Dimensional Arrays: Special Cases (continued)

Page 63: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 63

Two-Dimensional Array Initialization During Declaration

Page 64: Chap09

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)

Page 65: Chap09

Java Programming: From Problem Analysis to Program Design, 3e 65

Two-Dimensional Array Initialization During Declaration (continued)

Page 66: Chap09

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

Page 67: Chap09

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();}

Page 68: Chap09

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)

Page 69: Chap09

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)

Page 70: Chap09

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)

Page 71: Chap09

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)

Page 72: Chap09

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

Page 73: Chap09

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;

Page 74: Chap09

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

Page 75: Chap09

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

Page 76: Chap09

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

Page 77: Chap09

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