Chapter 9: Arrays J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis...

Post on 02-Jan-2016

229 views 2 download

Tags:

Transcript of Chapter 9: Arrays J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis...

Chapter 9: ArraysChapter 9: Arrays

JJavaava PProgramming:rogramming:

From Problem Analysis to Program From Problem Analysis to Program

Design,Design, Second EditionSecond Edition

Java Programming: From Problem Analysis to Program Design, Second Edition 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, Second Edition 3

Chapter Objectives

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, Second Edition 4

Array

A structured data type with a fixed number of components.

Every component is of the same type. Components are accessed using their relative

positions in the array.

Java Programming: From Problem Analysis to Program Design, Second Edition 5

One-Dimensional Arrays

Syntax to instantiate an array: dataType[ ] arrayName;arrayName = new dataType[intExp]

dataType[ ] arrayName = new dataType[intExp] dataType[ ] arrayName1, arrayName2;

Syntax to access an array component: arrayName[indexExp]

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

Java Programming: From Problem Analysis to Program Design, Second Edition 6

int[] num = new int[5];

Array num

Java Programming: From Problem Analysis to Program Design, Second Edition 7

Array list

Java Programming: From Problem Analysis to Program Design, Second Edition 8

int arraySize;

System.out.print("Enter the size of "

+ "the array: ");

arraySize = console.nextInt();

System.out.println();

int[] list = new int[arraySize];

Specifying Array Size During Program Execution

Java Programming: From Problem Analysis to Program Design, Second Edition 9

double[] sales = {12.25, 32.50, 16.90, 23,

45.68}; The values, called initial values, 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.

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.

Array Initialization During Declaration

Java Programming: From Problem Analysis to Program Design, Second Edition 10

A public instance variable length is associated with each array that has been instantiated.

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. This statement creates the array list of six components and

initializes the components using the values given. Here list.length is 6.

int[] list = {10, 20, 30, 40, 50, 60};

Arrays and the Instance Variable length

Java Programming: From Problem Analysis to Program Design, Second Edition 11

This statement creates the array numList of 10 components and initializes each component to 0.

int[] numList = new int[10];

The value of numList.length is 10.

These statements store 5, 10, 15, and 20, respectively, in the first four components of numList.

numList[0] = 5;numList[1] = 10;numList[2] = 15;numList[3] = 20;

You can store the number of filled elements, that is, the actual number of elements, in the array in a variable, say noOfElement. 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

Java Programming: From Problem Analysis to Program Design, Second Edition 12

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, Second Edition 13

Arrays 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, Second Edition 14

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, Second Edition 15

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, Second Edition 16

Code to Print Array

for (index = 0; index < sales.length; index++) System.out.print(sales[index] + " ");

Java Programming: From Problem Analysis to Program Design, Second Edition 17

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, Second Edition 18

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, Second Edition 19

Determining Largest Element in Array

Java Programming: From Problem Analysis to Program Design, Second Edition 20

Array Index Out of Bounds

An array is in bounds if:

0 <= index <= arraySize – 1

If index < 0 or index > arraySize:

ArrayIndexOutOfBoundsException exception is thrown.

Base address: Memory location of the first component in an array.

Java Programming: From Problem Analysis to Program Design, Second Edition 21

Declaring Arrays as Formal Parameters to Methods

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, Second Edition 22

The Assignment Operators and Arrays

Java Programming: From Problem Analysis to Program Design, Second Edition 23

The Assignment Operators and Arrays

Java Programming: From Problem Analysis to Program Design, Second Edition 24

for (int index = 0; index < listA.length;

index++)

listB[index] = listA[index];

The Assignment Operators and Arrays

Java Programming: From Problem Analysis to Program Design, Second Edition 25

Relational Operators Arrays

if (listA == listB)...

The expression listA == listB determines if the values of listA and listB are the same, thus determining 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, Second Edition 26

Relational Operators and Arrays

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, Second Edition 27

Methods for Array Processing

public static void fillArray(int[] list,

int noOfElements)

{

int index;

for (index = 0; index < noOfElements;

index++)

list[index] = console.nextInt();

}

Java Programming: From Problem Analysis to Program Design, Second Edition 28

public static void printArray(int[] list, int noOfElements){ int index; for (index = 0; index < noOfElements; index++) System.out.print(list[index] + " ");} public static int sumArray(int[] list, int noOfElements){ int index; int sum = 0; for (index = 0; index < noOfElements; index++) sum = sum + list[index]; return sum;}

Methods for Array Processing

Java Programming: From Problem Analysis to Program Design, Second Edition 29

public static int indexLargestElement(int[] list, int noOfElements){ int index; int maxIndex = 0; for (index = 1; index < noOfElements; index++) if (list[maxIndex] < list[index]) maxIndex = index; return maxIndex;}

public static void copyArray(int[] list1, int[] list2, int noOfElements){ int index; for (index = 0; index < noOfElements; index++) list2[index] = list1[index];}

Methods for Array Processing

Java Programming: From Problem Analysis to Program Design, Second Edition 30

Parallel Arrays

Arrays are parallel if the corresponding components hold related information.

Java Programming: From Problem Analysis to Program Design, Second Edition 31

Arrays of Objects

Can use arrays to manipulate objects. Example: Create an 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, Second Edition 32

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, Second Edition 33

Array of String Objects

Java Programming: From Problem Analysis to Program Design, Second Edition 34

Clock[] arrivalTimeEmp = new Clock[100];

Arrays of Objects

Java Programming: From Problem Analysis to Program Design, Second Edition 35

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

Java Programming: From Problem Analysis to Program Design, Second Edition 36

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

Instantiating Array Objects

Java Programming: From Problem Analysis to Program Design, Second Edition 37

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, Second Edition 38

Arrays and Variable Length Parameter List

public static double largest(double ... numList){ double max; int index; if (numList.length != 0) { max = list[0]; for (index = 1; index < numList.length; index++) { if (max < numList [index]) max = numList [index]; } return max; } return 0.0;}

Java Programming: From Problem Analysis to Program Design, Second Edition 39

Arrays and Variable Length Parameter List

double num1 = largest(34, 56);

double num2 = largest(12.56, 84, 92);

double num3 = largest(98.32, 77, 64.67, 56);

System.out.println(largest(22.50, 67.78,

92.58, 45, 34, 56));

double[] numberList = {18. 50, 44, 56.23, 17.89

92.34, 112.0, 77, 11, 22,

86.62);

System.out.println(largest(numberList));

Java Programming: From Problem Analysis to Program Design, Second Edition 40

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, Second Edition 41

foreach loop

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

for (double num : numList){ if (max < num) max = num;}

Java Programming: From Problem Analysis to Program Design, Second Edition 42

Two-Dimensional Arrays Data is sometimes in table form (difficult to represent using a

one-dimensional array).

To declare/instantiate a two-dimensional array:

dataType[ ][ ] arrayName = newdataType[intExp1][intExp2];

To access a component of a two-dimensional array:arrayName[indexExp1][indexExp2];

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

Java Programming: From Problem Analysis to Program Design, Second Edition 43

Two-Dimensional Arrays

Can specify different number of columns for each row (ragged arrays).

Three ways to process two-dimensional arrays: Entire array. Particular row of array (row processing). Particular column of array (column processing).

Processing algorithms is similar to processing algorithms of one-dimensional arrays.

Java Programming: From Problem Analysis to Program Design, Second Edition 44

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

Two-Dimensional Arrays

Java Programming: From Problem Analysis to Program Design, Second Edition 45

Accessing Two-Dimensional Array Components

Java Programming: From Problem Analysis to Program Design, Second Edition 46

Two-Dimensional Arrays: Special Cases

Java Programming: From Problem Analysis to Program Design, Second Edition 47

Two-Dimensional Arrays: Processing

Initialization

for (row = 0; row < matrix.length; row++) for (col = 0; col < matrix[row].length; col++) matrix[row][col] = 10;

Print

for (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, Second Edition 48

Input

for (row = 0; row < matrix.length; row++) for (col = 0; col < matrix[row].length; col++) matrix[row][col] = console.nextInt();

Sum by Row

for (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

Java Programming: From Problem Analysis to Program Design, Second Edition 49

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

Java Programming: From Problem Analysis to Program Design, Second Edition 50

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

Java Programming: From Problem Analysis to Program Design, Second Edition 51

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

Java Programming: From Problem Analysis to Program Design, Second Edition 52

Multidimensional Arrays

Can define three-dimensional arrays or n-dimensional arrays (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, Second Edition 53

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, Second Edition 54

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 each letter appears in text.

Java Programming: From Problem Analysis to Program Design, Second Edition 55

Programming Example Solution: Text Processing

An array of 26 representing the letters in the alphabet. Three methods:

copyText characterCount writeTotal

Value in appropriate index is incremented using methods and depends on character read from text.

Java Programming: From Problem Analysis to Program Design, Second Edition 56

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, Second Edition 57

Chapter Summary

Declaring arrays Instantiating arrays Processing arrays

Entire array Row processing Column processing

Common operations and methods performed on arrays Manipulating data in arrays