290 likes | 376 Views
Introduction to Arrays. CSCI 142 Object Oriented Programming Tina Ostrander. An array…. A group of variables that… Have a name Have a single type Primitive types Object types Can hold many values. Creating an Array. Declare the array variable Specifies the type and the name
E N D
Introduction to Arrays CSCI 142 Object Oriented Programming Tina Ostrander
An array… • A group of variables that… • Have a name • Have a single type • Primitive types • Object types • Can hold many values
Creating an Array • Declare the array variable • Specifies the type and the name • Allocate memory for the array • Specifies the size • Initialize the array elements • Fills the array with values
Creating an Array • Declare the array variable • double[] salary; • Allocate memory for the array • salary = new double[5]; • Initialize the array elements • salary[0] = 32500; Note: Steps 1 and 2 may be combined: double[] salary = new double[5]; Create a double array called salary Allocate enough memory to store 5 elements Assigns a value to the 1st array element
Creating an Array • Declare the array variable • GOval[] circles; • Allocate memory for the array • circles = new GOval[5]; • Initialize the array elements • circles[0] = new GOval(50, 50); Note: Steps 1 and 2 may be combined: GOval[] circles = new GOval[5]; Create a GOval array called circles Allocate enough memory to store 5 elements Assigns an object to the 1st array element
Practice Q: Write a statement to declare an int array called age. A: int[] age; Q: Write a statement to declare a GRect array called squares. A: GRect[] squares;
Practice Q: Allocate memory for 5 elements in the age array. A: age = new int[5]; Q: Allocate memory for 10 elements in the squares array. A: squares = new GRect[10];
Memory allocation • Memory is allocated for each element in the array. • Try to accurately estimate the number of array elements. • A value does not need to be stored in each array element. • The length field contains the size of the array. • Elements are initialized • Numbers to zero • Objects to null • Booleans to false
Initializing an Array • Array elements can be initialized one at a time… double[] salary = new double[5]; salary[0] = 30000.00; salary[1] = 45000.00; salary[2] = 52500.00; salary[3] = 62250.00; salary[4] = 37500.00; GOval[] circles = new GOval[5]; circles[0] = new GOval(50, 50); circles[1] = new GOval(75, 75); circles[2] = new GOval(100, 100); circles[3] = new GOval(125, 125); circles[4] = new GOval(150, 150);
Practice Q: Assign the value of 20 to the first element of the age array. A: age[0] = 20; Q: Assign the value of 45 to the last element of the age array. A: age[4] = 45; orage[age.length - 1] = 45;
Initializing an Array • An array can be initialized with an “initializer list”…double[] salary = {30000, 45000, 52500, 62250, 37500}; String[] name = {“Branco”, “Tierney”, “Matt”}; • Array is declared, memory is allocated, and elements are initialized all in one statement • Size is automatically assigned • Semicolon is required after closing brace • Keyword new is not required • This only works if you know the array values when the array is declared
Initializing an Array • An array can be initialized with a loop… double[] salary = new double[10];double amount = 40000.00;for (int i = 0; i < salary.length; i++){ salary[i] = amount; amount += 10000;} Note that this onlyworks when there isa pattern to the values.
Initializing an Array • An array can be initialized with a loop GOval[] circles = new GOval[10];int size = 25;for (int i = 0; i < circles.length; i++){ circles[i] = new GOval(size, size); size += 25;} This returns the numberof elements in the array.
Example 2 String months = "JanFebMarAprMayJunJulAugSepOctNovDec"; String[] month = new String[12]; for (inti = 0; i < 12; i++) month[i] = months.substring(i * 3, i * 3 + 3); Example 3 intcount = 0; double[] cost = new double[5]; while (count < cost.length) { cost[count] = readDouble(“Enter cost”); count++; } Initializing an Array
Practice Q: Assign a GRect object to the first element of the squares array. A: squares[0] = new GRect(50, 50); Q: Assign a GRect to each element of the squares array. A: for (inti = 0; i<squares.length; i++) squares[i] = new GRect(50, 50);
Practice Q: Assign even numbers 2 through 10 to the age array. A: for (inti = 0; i < age.length; i++) age[i] = i * 2 + 2; A: intval = 2; for (inti = 0; i < age.length; i++) { age[i] = val; val += 2; }
Practice Q: Assign the numbers 5 through 1 to the age array. A: for (inti = 0; i < age.length; i++) age[i] = 5-i; A: intval = 5; for (inti = 0; i < age.length; i++) { age[i] = val; val--; }
Practice Q: Assign a GRect to each element of the squares array, where each square is 10 pixels larger than the previous square . A: intsize = 10;for (inti = 0; i < squares.length; i++) { squares[i] = new GRect(size, size); size += 10; }
Try It • Create a ConsoleProgram • Declare an array called grades • Allocate enough memory for 5 grades • Initialize the array by prompting the user to enter each grade • Calculate the average grade
Searching an Array • Loop through the array • Compare search value to each value in the array • Use a variable to keep track of if/where the search value was found
public class Search extends ConsoleProgram { public void run() { int[] nums = {15, 9, 6, 2, 4, 7, 23, 18, 29, 18}; intfindNum = 7, position = -1; for (inti = 0; i < nums.length; i++) if (nums[i] == findNum) { position = i; break; //Quit looking } if (position != -1) println (findNum + " found at position " + position); else println (findNum + " was not found."); } }
Try It • Modify the Search program so that it displays every instance of findNum.
Passing Arrays • An array variable or an entire array may be passed to a method. • Array values are passed by value.myMethod(salary[3]) • Copy of the value is passed • Arrays are passed by reference.myMethod(salary) • Array address is passed
public class Salary extends ConsoleProgram { public void run() { double[] salary = {29000, 32500, 56000, 48500, 42950}; println ("The average salary is " + average(salary)); } public double average(double[] array) { double sum = 0.0; for(inti=0; i<array.length; i++) { sum += array[i]; } return sum / array.length; } }
Try It • Add a maximum method to the Salary program. • The method should take an array and return the largest value in the array.
Ordered Arrays • An array is ordered if its values are in ascending or descending order. • Ordered arrays can be searched more efficiently than unordered arrays.
Sorting Arrays • Bubble sort • Compare adjacent items if (someArray[i] > someArray[i + 1]) • If they are out of order, swap them temp = someArray[i]; someArray[i] = someArray[i + 1]; someArray[i + 1] = temp; • For n items, make n-1 passes through the list
int[] salary = {32500, 45950, 24675, 23000, 29800}; int temp = 0; for (int i = 0; i < salary.length-1; i++) for (int j = 0; j < salary.length – i - 1; j++) if (salary[j] > salary [j + 1]) { //swap temp = salary[j]; salary[j] = salary[j + 1]; salary[j + 1] = temp; } for (int i = 0; i < salary.length; i++) print (salary[i] + "\t"); println(); This sorts ints
Why use Arrays? • Arrays allow for faster data access (RAM vs. storage) • Data entered into an array once can be used multiple times • Arrays simplify programming • Arrays allow fewer variable names to be defined and used