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 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 Knowledge Goals • Understand the difference between an array and the information stored or referenced within the array • Understand the role of an array in structuring data within a problem • Understand the role of a two-dimensional array in representing a table with rows and columns • Know how a two-dimensional array is constructed as an array of arrays 3 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 4 Skill Goals • Declare a two-dimensional array • Perform fundamental operations on a twodimensional array: • Access a component of the array • Process the array by rows • Process the array by columns • Declare a two-dimensional array as a parameter • Declare and process a multidimensional array 5 Java Data Types 6 Java Data Types Try expressing these definitions in words 7 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 8 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? 9 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) 10 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 11 Array composite, unstructured composite, structured heterogeneous homogeneous access by field name access by position One-Dimensional Arrays Declare Instantiate 12 One-Dimensional Arrays int[] numbers = new int[4]; What type of values can be stored in each cell ? 13 One-Dimensional Arrays float[] realNumbers = new float[10]; How do you get values into the cells ? 14 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 15 One-Dimensional Arrays Accessing Individual Components Indexing expression 16 One-Dimensional Arrays Indexing Expression Place into which a value is stored; value is changed 17 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] ? 18 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 19 One-Dimensional Arrays Aggregate Array Operations What does the following expression return? numbers == values 20 One-Dimensional Arrays Now, what does the following expression return? numbers == values 21 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? 22 More Examples What does this code segment do? totalOccupants = 0; for (int aptNo = 0; aptNo < occupants.length; aptNo++) totalOccupants = totalOccupants +occupants[aptNo]; 23 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; } 24 Arrays of Objects String[] groceryItems = new String[10]; for (index = 0; index < grocerItems.length; { groceryItems[index] = inFile.nextLine(); } 25 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 26 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()) ? 27 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] 28 . . . 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 29 Arrays of Objects The Vector class A class available in java.util that offers functionality similar to that of a one-dimensional array of objects Objects of class Vector can grow and shrink; the size is not fixed for its lifetime However, internal resizing operations are time consuming What do you think is the Vector class data structure? 30 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? 31 Two-Dimensional Arrays Twodimensional arrays can be used to represent tables such as this map 32 Two-Dimensional Arrays Two-dimensional array A collection of homogeneous components, structured in two dimensions (referred to as rows and columns); each component is accessed by a pair of indexes representing the component’s position within each dimension 33 Two-Dimensional Arrays 34 Two-Dimensional Arrays 35 Two-Dimensional Arrays Can you predict how each item is accessed? 36 Two-Dimensional Arrays 37 Two-Dimensional Arrays Actual Java implementation 38 Two-Dimensional Arrays hiTemp.length is the number of rows hiTemp[2].length is the number of columns in row two 39 Two-Dimensional Arrays int[][] hiTemp = new int[6][12]; for (int col = 0; col < hiTemp[2].length; col++) System.out.println(data[2][col]); What is printed? 40 Two-Dimensional Arrays Subarray processing by row 41 Two-Dimensional Arrays for (int row = 0; row < rowsFilled; row++) { // Array is not ragged total = 0; for (int col = 0; col < colsFilled; col++) total = total + data[row][col]; outFile.println("Row sum: " + total); } 42 Two-Dimensional Arrays Subarray processing by column 43 Two-Dimensional Arrays for (int col = 0; col < colsFilled; col++) { // Array is not ragged total = 0; for (int row = 0; row < rowsFilled; row++) total = total + data[row][col]; outFile.println("Column sum: " + total); } 44 Two-Dimensional Arrays When processing by row, the outer loop is ______ (row, column)? the inner loop is ______ (row, column)? When processing by column, the outer loop is ______ (row, column)? the inner loop is ______ (row, column)? 45 Two-Dimensional Arrays Initializer Lists int[][] hits = {{ { { { 2, 1, 1, 0, 1, 1, 0, 1, 0, 2, 0, 2, 3, 2 }, 3 }, 0, 0 }, 1, 1 }}; hits [0] 46 [1] [2] [3] [4] 2 1 0 3 2 1 1 2 3 1 0 0 0 0 0 1 2 1 1 Three-Dimensional Arrays 47 Array A collection of homogeneous components ordered on N dimensions (N>=1); each component is accessed by N indexes, each of which represents the component's position within that dimension Extras I loved to give talks to young people; I used colored wires to demonstrate different computer speeds Who am I? 48 Extras - GUI Track Rather than using JOptionPane, you can build your own window using class JFrame JFrame outFrame = new JFrame(); outFrame consists of the outside of the window frame that holds controls and the content pane which shows the content 49 Extras - GUI Track 50 Extras - GUI Track Handling your own window with JFrame requires declaring and instantiating a JFrame object setting the size of the object declaring and getting a pane setting the layout manager for the pane adding text to the pane making the frame visible 51 Extras - GUI Track JFrame object with a text field 52