Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Chapter 9 (part of) Single-dimensional Arrays Knowledge Goals • Understand the difference between atomic and composite data types • Understand the difference between unstructured and structured composite data types • Know how Java implements arrays • Know how an array is passed as an argument 2 Skill Goals • Declare and instantiate a one-dimensional array • Access and manipulate the individual components in a one-dimensional array where the elements are • Atomic types • Composite types • Use an initializer list to instantiate a onedimensional array 3 Java Data Types 4 Java Data Types Try expressing these definitions in words 5 Java Data Types Composite data type A data type that allows a collection of values to be associated with an identifier of that type Unstructured data type A collection of components that are not organized with respect to one another Structured data type An organized collection of components; the organization determines the means used to access individual components 6 Is a class structured? Java Data Types class Example { int field1; int field2; double field3; } class Example { double field3; int field2; int field1; } Changing the order does not change the access Is a class structured? Did you change your answer? 7 One-Dimensional Arrays Data structure The implementation of a composite data type Note the difference between a data structure (implementation of any composite type) and a structured data type (a composite type that is structured) 8 One-Dimensional Arrays One-dimensional array A structured collection of components, all of the same type, that is given a single name; each component is accessed by an index that indicates the component's position within the collection Class 9 Array composite, unstructured composite, structured heterogeneous homogeneous access by field name access by position One-Dimensional Arrays Declare Instantiate 10 One-Dimensional Arrays int[] numbers = new int[4]; What type of values can be stored in each cell ? 11 One-Dimensional Arrays float realNumbers[] = new float[10]; How do you get values into the cells ? 12 One-Dimensional Arrays Array Initializers int numbers[] = {4.93, -15.2, 0.5, 1.67}; Initializers do the instantiation and storing in with the declaration 13 One-Dimensional Arrays Accessing Individual Components Indexing expression 14 One-Dimensional Arrays Indexing Expression Place into which a value is stored; value is changed 15 Indexing Expression Place from which a value is extracted; value is not changed One-Dimensional Arrays What happens if you try to access value[1000] ? 16 One-Dimensional Arrays Out-of-bounds array index An index that is either less than 0 or greater than the array size minus 1, causing an ArrayIndexoutOfBoundsException to be thrown Length A public instance variable associated with each instantiated array, accessed by array name .length Use length to avoid out-of-bounds indexes 17 One-Dimensional Arrays Aggregate Array Operations What does the following expression return? numbers == values 18 One-Dimensional Arrays Now, what does the following expression return? numbers == values 19 One-Dimensional Arrays System provides two useful array methods first = second.clone(); // duplicates second import java.util.Arrays; Arrays.equals(first, second); // item-by-item check System.out.println(first == second); System.out.println(Arrays.equals(first, second); What is printed? 20 More Examples What does this code segment do? totalOccupants = 0; for (int aptNo = 0; aptNo < occupants.length; aptNo++) totalOccupants = totalOccupants +occupants[aptNo]; 21 More Examples What does this code fragment do ? if ((letter >= 'A' && letter <= 'Z' || letter >= 'a' && letter <= 'z')) { index = (int)Character.toUpperCase(letter) - (int)'A'; lettrCount[index] = letterCount[index] + 1; } 22 Arrays of Objects String groceryItems[] = new String[10]; for (index = 0; index < grocerItems.length; { groceryItems[index] = inFile.nextLine(); } 23 index++) Arrays of Objects Expression groceryItems array groceryItems[0] groceryItems[0].charAt() groceryItems[10] Class/Type Reference to an Reference to a string A character Error Base address The memory address of the first element of the array "Reference to" is the base address 24 Arrays of Objects How do Array.equals and clone operate with arrays of objects? Array.equals uses the == operator to compare arrays, so the addresses are compared clone uses the = operator, so the addresses are copied Array.equals(numbers, numbers.clone()) ? 25 Arrays of Objects Date bigEvents[] = new Date[10]; bigEvents Expression Class/Type bigEvents Array bigEvents[0] Date bigEvents[0].month String bigEvents[0].day int bigEvents[0].year int bigEvents[0].month.charAt(0) char Date [0] [1] . . . . Date . . . . . Date [9] 26 . . . Arrays of Objects length is the number of slots assigned to the array What if the array doesn’t have valid data in each of these slots? Keep a counter of how many slots have valid data and use this counter when processing the array More about this type of processing in Chapter 11 27 Arrays of Objects public static double average(int grades[]) // Calculates and returns the average grade in an // array of grades. // Assumption: All array slots have valid data. { int total = 0; for (int i = 0; i < grades.length; i++) total = total + grades[i]; return (double) total / (double) grades.length; } What is passed as an argument? 28