JAVA Arrays Objectives • Be able to declare and initialize arrays • Be able to conceptualize (draw) how arrays are represented in computer memory. • Be able to process arrays (especially using for loops) • Understand when to use an array 3 Representing Lists of Objects • Frequently, applications must store lists of objects of the same type. • Variables represent one object at a time so a list would require separate variables: String country1, country2, country3; int population1, population2, population3; • We can represent lists of objects using arrays. 4 Array Definition Pattern ElementType[] arrayName; or ElementType[] arrayName = new ElementType[length]; or ElementType[] arrayName = arrayInitializer; ElementType is any type (including an array type); arrayName is the handle for the array object being defined – if there is no assignment clause in the statement, the handle is set to null; length is an expression specifying the number of elements in the array; arrayInitializer is a list of literals of type ElementType, enclosed in curly braces ({ }). 5 Array Definitions double[] array1; array1 final int SIZE = 4; int[] array2 = new int[SIZE]; array2 [0] ? [1] [2] ? ? String[] array3 = { "Bashful", "Doc" }; array3 [0] “Bashful” [1] “Doc” [3] ? 6 Array Subscripts String[] anArray = new String[2]; anArray[0] = "Grumpy"; anArray[1] = "Happy"; anArray [0] [1] “Grumpy” println(anArray[1]); “Happy” 7 Working with Arrays String[] anArray = new String[2]; anArray[0] = "Grumpy"; anArray[1] = "Happy"; anArray [0] [1] “Grumpy” “Happy” for (int i = 0; i < anArray.length; i++) { println(anArray[i]); } 8 Example: Population by Country String[] countries = { "Belize", "Costa Rica", "El Salvador", "Guatemala", "Honduras", "Nicaragua", "Panama" }; int[] populations = { 294385, 4133884, 6948073, 12728111, 7483763, 5675356, 3242173 }; for (int i = 0; i < countries.length; i++) { println(countries[i] + ": " + populations[i]); } 9 Arrays as Parameters public static int computeTotal(int[] values) { int result = 0; for (int i = 0; i < values.length; i++) { result += values[i]; } return result; } 10 Reference Values as Parameters public static void main(String[] args) { String[] sa = {"Grumpy", "Happy"}; changeStringArray(sa); System.out.println(sa[0] + ” ” + sa[1]); } public static void changeStringArray (String[] stringArray) { sa[0] = "Dopey"; sa[1] = "Sleepy"; System.out.println(sa[0] + ” ” + sa[1]); } 11 Ref. Values as Parameters (corrected) public static void main(String[] args) { String[] sa = {"Grumpy", "Happy"}; changeStringArray(sa); System.out.println(sa[0] + ” ” + sa[1]); } public static void changeStringArray (String[] sA1) { sA1[0] = "Dopey"; sA1[1] = "Sleepy"; System.out.println(sA1[0] + ” ” + sA1[1]); } 12 Exercises Search Linear Search: 1. Receive a non-null list of values and a target value. 2. Loop for each element in list a. If value equals list[i] then i. Return true 3. Return false. Binary Search Receive a non-null, sorted list of values and a target value. 2. If list is null 1. Return -1. a. Set first = 0 and last = length of the list - 1. 4. Loop while first <= last 3. Set middle to the integer quotient (first + last) / 2. If value < list[middle] then a. b. i. else if value > list[middle] then c. i. Set first = middle + 1; else d. i. 5. Set last = middle – 1; Return middle; Return -1. 15 Multi-Dimensional Data • Some data sets cannot be represented with single- dimensional arrays. • Examples: • Matrixes, sudoku puzzles, tictactoe games, chess, checkers, etc. • Spreadsheets are generally two dimensional. • Databases are generally X dimensional where X > 2. 16 Multi-Dimensional Arrays • Some data collections, like the Sudoku grid can be viewed as multi-dimensional data. • Declaring 2-D arrays: type[][] identifier = arrayExpression; • Constructing 2-D arrays: new type[totalRows][totalColumns] • Accessing 2-D array elements: identifier[someRow][someColumn] • This can be generalized to more dimensions.