Chapter 9: Arrays
E N D
Presentation Transcript
Chapter 9: Arrays JavaProgramming: From Problem Analysis to Program Design, Second Edition
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
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
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
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
Array num int[] num = new int[5]; Java Programming: From Problem Analysis to Program Design, Second Edition
Array list Java Programming: From Problem Analysis to Program Design, Second Edition
Specifying Array Size During Program Execution int arraySize; System.out.print("Enter the size of " + "the array: "); arraySize = console.nextInt(); System.out.println(); int[] list = new int[arraySize]; Java Programming: From Problem Analysis to Program Design, Second Edition
Array Initialization During Declaration 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. Java Programming: From Problem Analysis to Program Design, Second Edition
Arrays and the Instance Variable length • 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}; Java Programming: From Problem Analysis to Program Design, Second Edition
Arrays and the Instance Variable length • 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. Java Programming: From Problem Analysis to Program Design, Second Edition
Processing One-Dimensional Arrays • 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] + " "); Java Programming: From Problem Analysis to Program Design, Second Edition
Arrays • Some operations on arrays: • Initialize • Input data • Output stored data • Find largest/smallest/sum/average of elements double[] sales = newdouble[10]; int index; double largestSale, sum, average; Java Programming: From Problem Analysis to Program Design, Second Edition
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
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
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
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
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
Determining Largest Element in Array Java Programming: From Problem Analysis to Program Design, Second Edition
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
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 = newint[10]; double[] doubleNumList = newdouble[15]; int number; arraysAsFormalParameter(intList, doubleNumList, number); Java Programming: From Problem Analysis to Program Design, Second Edition
The Assignment Operators and Arrays Java Programming: From Problem Analysis to Program Design, Second Edition
The Assignment Operators and Arrays Java Programming: From Problem Analysis to Program Design, Second Edition
The Assignment Operators and Arrays for (int index = 0; index < listA.length; index++) listB[index] = listA[index]; Java Programming: From Problem Analysis to Program Design, Second Edition
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
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
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
Methods for Array Processing 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; } Java Programming: From Problem Analysis to Program Design, Second Edition
Methods for Array Processing 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]; } Java Programming: From Problem Analysis to Program Design, Second Edition
Parallel Arrays • Arrays are parallel if the corresponding components hold related information. Java Programming: From Problem Analysis to Program Design, Second Edition
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
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
Array of String Objects Java Programming: From Problem Analysis to Program Design, Second Edition
Arrays of Objects Clock[] arrivalTimeEmp = new Clock[100]; Java Programming: From Problem Analysis to Program Design, Second Edition
Instantiating Array Objects for (int j = 0; j < arrivalTimeEmp.length; j++) arrivalTimeEmp[j] = new Clock(); Java Programming: From Problem Analysis to Program Design, Second Edition
Instantiating Array Objects arrivalTimeEmp[49].setTime(8, 5, 10); Java Programming: From Problem Analysis to Program Design, Second Edition
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
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
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
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
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
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
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
Two-Dimensional Arrays double[][]sales = new double[10][5]; Java Programming: From Problem Analysis to Program Design, Second Edition
Accessing Two-Dimensional Array Components Java Programming: From Problem Analysis to Program Design, Second Edition
Two-Dimensional Arrays: Special Cases Java Programming: From Problem Analysis to Program Design, Second Edition
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
Two-Dimensional Arrays: Processing 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); } Java Programming: From Problem Analysis to Program Design, Second Edition
Two-Dimensional Arrays: Processing 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); } Java Programming: From Problem Analysis to Program Design, Second Edition
Two-Dimensional Arrays: Processing 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); } Java Programming: From Problem Analysis to Program Design, Second Edition