990 likes | 1.18k Views
Chapter 9: Arrays. J ava P rogramming: 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.”
E N D
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.
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.
Enter 5 numbers: 3 6 8 9 0Sum = 26Numbers is reverse = 0 9 8 6 3 Motivation Write a program to read 5 numbers, find their sum and print them in reverse order. import java.util.*; public class RevOrder{ static Scanner console = new Scanner(System.in); public static void main(String[] args){ int item0, item1, item2, item3, item4; int sum; System.out.println("Enter 5 numbers: "); item0=console.nextInt(); item1=console.nextInt(); item2=console.nextInt(); item3=console.nextInt(); item4=console.nextInt(); sum = item0+item1+item2+item3+item4; System.out.println("Sum = " + sum); System.out.print("Numbers is reverse = ");System.out.println(item4+" "+item3+" "+item2+" "+item1+" "+item0); }}
Motivation Write a program to read 100 numbers, find their sum and print them in reverse order ?????
Motivation • Note the following in the preceding program: • 5 variables must be declared. • All variables are of type int. • Variables name (num0 num4); • Instead of having to use a large number of individual and unconnected variables, we can use a single data structure that combines them.
Motivation • In this chapter, we will examine: • How to store collections of items and access these items using one variable name given to the collection. • The data structure that lets you do all of theses things in java is called array.
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.
One-Dimensional Arrays • Syntax to declare an array: • dataType[ ] arrayName; • In java, an array is an object: • It is a reference variable. • To store data we must instantiate the array object using new operator. • Syntax to instantiate an array object: arrayName = new dataType[intExp] Where intExp = number of components in array >= 0
One-Dimensional Arrays • Declaration with instantiation: dataType[ ] arrayName = new dataType[intExp] • Declaring more than one array of the same type: dataType[ ] arrayName1, arrayName2; • Syntax to access an array component: • arrayName[indexExp] • intExp = number of components in array >= 0 • 0 <= indexExp <= intExp
Array num Example9-1 • The statement: int[] num = new int[5]; • Declares and creates the array num of 5 components. • Each component is of type int. • The components are accessed as: num[0], num[1],num[2],num[3],num[4]
Array num int[] num = new int[5]; Why all the values = 0 ???????????
Array num • When an array is instantiated. Java automatically initializes its components to their default values. For example, numeric arrays are initialized to 0. • What are string, char array initialized to?
Alternate Ways to Declare an array • int list[];// here [] is after list not int • But take care, what is the difference here: • int alpha[], beta; • int[] gamma, delta; • It is recommended that you declare arrays as int[].
Array list int [] list = new int[10];
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]; • Arrays that are created during program execution are called dynamic arrays.
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.
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. int[] list = {10, 20, 30, 40, 50, 60}; Here, list.length is 6.
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; • The value of numList.length is still 10. • You can store the number of filled elements, that is, the actual number of elements, in the array in a variable, SAYnoOfElement. It is a common practice for a program to keep track of the number of filled elements in an array.
Processing One-Dimensional Arrays • Loops used to step through elements in array and perform operations. int[] list = new int[100]; int i; //process list[i], the (i + 1)th element of list for (i = 0; i < list.length; i++) //inputting data to list for (i = 0; i < list.length; i++) list[i] = console.nextInt(); //outputting data from list for (i = 0; i < list.length; i++) System.out.print(list[i] + " "); • Remember to start loop counter from 0 because Array index starts from 0.
Arrays • Some operations on arrays: • Initialize • Input data • Output stored data • Find largest/smallest/sum/average of elements Example 9_3 double[] sales = newdouble[10]; int index; double largestSale, sum, average;
Code to Initialize Array to Specific Value (10.00) for (index = 0; index < sales.length; index++) sales[index] = 10.00; Note: .length NOT .length() It is a variable not a method.
Code to Read Data into Array for (index = 0; index < sales.length; index++) sales[index] = console.nextDouble();
Code to Print Array for (index = 0; index < sales.length; index++) System.out.print(sales[index] + " ");
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;
Determining Largest Element in Array maxIndex = 0; for (index = 1; index < sales.length; index++) if (sales[maxIndex] < sales[index]) maxIndex = index; largestSale = sales[maxIndex];
Determining Largest Element in Array After for loop executes, maxIndex=7 largestSale=sales[maxIndex]= 98.23. Exercises: • How to find the smallest element in an array???? • Rewrite the program that we discussed in the beginning of this chapter: the RevOrd class.
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. If the program does not handle this exception, the program terminates.
Base address: • Base address: is the address (memory location) of the first component in an array. • Base address of list is the address of list[0]. • Value of variable list is the base address of the array= the address of list[0]. • When you pass an array as a parameter, the base address of the actual array is passed to the formal parameter.
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);
The Assignment Operators and Arrays int listA={5,10,15,20,25,30,35}; int listB=new int[listA.length];
The Assignment Operators and Arrays • You can use the assignment operator(=) to assign listA to listB. However, the result obtained might not be what you expect. • For example: listA = listB; • You expect: element of listA are copied to listB. • That is wrong,listA is a refrence varible, both listA and listB refer to the same array.
The Assignment Operators and Arrays To copy listA components to listB: for (int index = 0; index < listA.length; index++) listB[index] = listA[index];
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.
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)) ...
Methods for Array Processing Example 9_5 public static void fillArray(int[] list, int noOfElements) { int index; for (index = 0; index < noOfElements; index++) list[index] = console.nextInt(); }
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; }
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]; }
Methods for Array Processing You MUST Check example9_6 for calling these methods.
Parallel Arrays • Arrays are parallel if the corresponding components hold related information. • Example: You need to keep track of 50 students ID with their grades. Int [] studentId = new int[50]; Char[] courseGrade = new char[50]; studentId[3] and courseGrade[3] holds the data for the same student. studentId courseGrade 2345 A 4563 C 4590 C 2404 B
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();
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";
Array of String Objects • You can use String methods to work with the objects of nameList. • nameList[0].equals(“Amanda Green”) // true • nameList[4].substring(0,5) //Mandy
Arrays of Objects of Other Classes Clock[] arrivalTimeEmp = new Clock[100];
Instantiating Array Objects for (int j = 0; j < arrivalTimeEmp.length; j++) arrivalTimeEmp[j] = new Clock();
Instantiating Array Objects arrivalTimeEmp[49].setTime(8, 5, 10);