Download presentation
Presentation is loading. Please wait.
Published byTodd Arnold Modified over 9 years ago
1
Chapter 8 - Arrays
2
Chapter 8 Common to want to deal with collection of items Common to want to deal with collection of items Keep information about all 302 students (250) Keep information about all 302 students (250) Information about all video files on computer Information about all video files on computer All of my grades since kindergarten All of my grades since kindergarten Books in a library Books in a library Infeasible to enumerate an identifier for each Infeasible to enumerate an identifier for each book1,book2,book3,….,book500 book1,book2,book3,….,book500
3
Basic arrays Arrays are a sequence of a data type Arrays are a sequence of a data type Two components Two components Datatype Datatype Size Size
4
Datatype What type of element do we went as the base of the array? What type of element do we went as the base of the array? Can be a primitive or reference type Can be a primitive or reference typeSyntax: [] ; [] ;
5
8.1 Arrays Problem: Want to display differences in scores from average Problem: Want to display differences in scores from average We have to keep track of each score We have to keep track of each score We could just create one identifier for all 10 scores (score1, score2…) We could just create one identifier for all 10 scores (score1, score2…) But what if we wanted to take in more scores? But what if we wanted to take in more scores? Solution: Use an array of scores to store all scores Solution: Use an array of scores to store all scores double[] scores; //OR double scores[];
6
Component 2: Size Must use new operator Must use new operatorSyntax: = new double[ ]; = new double[ ];Example: scores = new double[10]; double[] scores = new double[10]; What data type is an array? What data type is an array?
7
Memory Diagram scores 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
8
Arrays Can access an individual item in the collection Can access an individual item in the collection Use a single identifier for the whole collection (scores) and then use an indexed expression to access an array element Use a single identifier for the whole collection (scores) and then use an indexed expression to access an array element Zero based indexing Zero based indexing Index numbered 0 through size-1 Index numbered 0 through size-1 scores[0] scores[0] scores[2]//3 rd element scores[2]//3 rd element Can use expressions scores[i+1] Can use expressions scores[i+1]
9
Memory Diagram scores 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 scores[2]
10
Output Difference double[] scores = new double[10]; double avg, sum = 0; for(int i=0; i < 10; i++){ System.out.print(“Enter Score”); scores[i] = in.nextDouble(); sum += scores[i]; } avg = sum/10; for(int i=0; i < 10; i++){ System.out.print("Score "+i+" "); System.out.print(score[i]+" "); System.out.println(score[i] – avg); }
11
Sample Run Input Enter score: 22 Enter score: 24 Enter score: 90 Enter score: 88 Enter score: 75 Enter score: 95 Enter score: 65 Enter score: 80 Enter score: 92 Enter score: 69 Output Score 0 22.0 -48.0 Score 1 24.0 -46.0 Score 2 90.0 20.0 Score 3 88.0 18.0 Score 4 75.0 5.0 Score 5 95.0 25.0 Score 6 65.0 -5.0 Score 7 80.0 10.0 Score 8 92.0 22.0 Score 9 69.0 -1.0
12
Initial Values When array is created, all values are initialized depending on array type: When array is created, all values are initialized depending on array type: Numbers: 0 Numbers: 0 Boolean: false Boolean: false Object References: null Object References: null Means compiler does not force initialization like with primitives Means compiler does not force initialization like with primitives
13
Length We assumed size of array was 10…what if we aren’t sure? Or want to change size? We assumed size of array was 10…what if we aren’t sure? Or want to change size? Every array has a public constant data member length (no parenthesis) Every array has a public constant data member length (no parenthesis) for(int i=0; i < scores.length; i++){ System.out.print("Score "+i+" "); System.out.print(score[i]+" "); System.out.println(score[i] – avg); }
14
Initialization Say we wanted to store all the month names? Say we wanted to store all the month names? Can keep array of Strings Can keep array of Strings String[] monthName = new String[12]; monthName[0] = “Jan”; monthName[1] = “Feb”; monthName[2] = “Mar”; monthName[3] = “Apr”; monthName[4] = “May”; monthName[5] = “Jun”; monthName[6] = “Jul”; monthName[7] = “Aug”; monthName[8] = “Sep”; monthName[9] = “Oct”; monthName[10] = “Nov”; monthName[11] = “Dec”;
15
Adv 8.1 Initializing arrays You can also initialize all values right off the bat instead of individually as before You can also initialize all values right off the bat instead of individually as before String[] monthName = {“Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, “Jul”, “Aug”, “Sep”, “Oct”, “Nov”, “Dec”} No need to use new, or specify size No need to use new, or specify size Knows size from number of values in list Knows size from number of values in list
16
Array sizes So far, we have used constants to define the size of the array So far, we have used constants to define the size of the array Fixed-size array declaration Fixed-size array declaration What about if we aren’t sure how many scores we want? What about if we aren’t sure how many scores we want? Solution 1 – declare array of size 100 and get input until quit or 100 sizes are input Solution 1 – declare array of size 100 and get input until quit or 100 sizes are input
17
Array sizes 2 problems 2 problems Inefficient – wastes space (what if we get 1 score? Wasted space for other 99) underutilization Inefficient – wastes space (what if we get 1 score? Wasted space for other 99) underutilization Limiting – what if we want more than 100 scores? Limiting – what if we want more than 100 scores? Solution 2 – variable size array – non-constant values for size Solution 2 – variable size array – non-constant values for size But you still cannot change the size once created (length is constant) But you still cannot change the size once created (length is constant)
18
User defined size int size; double [] scores; System.out.println("Enter number of scores to enter: "); size = in.nextInt(); scores = new double[size]; Can use any mathematic expression Can use any mathematic expression Must give a whole number (integer) Must give a whole number (integer)
19
Array of Objects BankAccount[] ba; System.out.print(“Enter number of accounts: “); int numAccounts = in.nextInt(); ba = new BankAccount[numAccounts]; ba[0].deposit(500); What’s wrong?
20
Objects and arrays We have created the array(i.e. the bins) We have created the array(i.e. the bins) What’s in the bins? What’s in the bins? We still need to create an object for each bin We still need to create an object for each bin
21
Memory Diagram ba 0 1 2 3 4 5 6 7 8 9 … 0 1 2 3 4 5 6 7 8 9 …
22
Create objects Each “bin” (index of the array) is a reference Each “bin” (index of the array) is a reference When we declare an array, we declare numAccounts identifiers in essence When we declare an array, we declare numAccounts identifiers in essence Now we need to create a BankAccount object for each bin Now we need to create a BankAccount object for each bin
23
Array of Objects BankAccount[] ba; System.out.print(“Enter number of accounts: “); int numAccounts = in.nextInt(); ba = new BankAccount[numAccounts]; ba[0] = new BankAccount(); ba[0].deposit(500);
24
Memory Diagram ba 0 1 2 3 4 5 6 7 8 9 … 0 1 2 3 4 5 6 7 8 9 … :BankAccount 500 balanc e
25
Arrays of Objects We will use the Person class to illustrate this concept. We will use the Person class to illustrate this concept. An array of objects is declared and created just as an array of primitive data types is. An array of objects is declared and created just as an array of primitive data types is. Person[] person; person = new Person[20];
26
Fig. 10.4 Wu An array of Person objects after the array is created. An array of Person objects after the array is created.
27
The person array with one Person object added to it. The person array with one Person object added to it.
28
Arrays of Objects To assign data values to this object, we can execute To assign data values to this object, we can execute person[0].setName (“Ms. Latte”); person[0].setAge (20); person[0].setGender (‘F’); The syntax here is the one used to call an object’s method; we are using an indexed expression to refer to the object instead of a simple variable. The syntax here is the one used to call an object’s method; we are using an indexed expression to refer to the object instead of a simple variable.
29
The following program illustrates various aspects of array processing: The following program illustrates various aspects of array processing: Creating a new person array. Creating a new person array. Creating a new Person object and assigning values to it. Creating a new Person object and assigning values to it. Finding the average age of the persons in the array. Finding the average age of the persons in the array. Finding the youngest and oldest persons in the array. Finding the youngest and oldest persons in the array. Finding a particular person in the array. Finding a particular person in the array.
30
/* Chapter 10 Sample Program: Illustrate the processing of an array of Person objects File: Ch10ProcessPersonArray.java */ class Ch10ProcessPersonArray { public static void main (String[] args) { public static void main (String[] args) { Person[] person; //declare the person array Person[] person; //declare the person array person = new Person[5]; //and then create it person = new Person[5]; //and then create it
31
//----------- Create person Array ------------// String name, inpStr; String name, inpStr; int age; int age; char gender; char gender; for (int i = 0; i < person.length; i++) { for (int i = 0; i < person.length; i++) { //read in data values //read in data values System.out.println(“Enter info for a person”); System.out.println(“Enter info for a person”); name = in.nextLine(); name = in.nextLine(); age = in.nextInt(); age = in.nextInt(); inpStr = in.next().charAt(0); inpStr = in.next().charAt(0); //create a new Person and assign values //create a new Person and assign values person[i] = new Person( ); person[i] = new Person( ); person[i].setName ( name ); person[i].setName ( name ); person[i].setAge ( age ); person[i].setAge ( age ); person[i].setGender( gender ); person[i].setGender( gender );}
32
//------ Compute Average Age --------------// float sum = 0, averageAge; float sum = 0, averageAge; for (int i = 0; i < person.length; i++) { for (int i = 0; i < person.length; i++) { sum += person[i].getAge(); sum += person[i].getAge(); } averageAge = sum / (float) person.length; averageAge = sum / (float) person.length; System.out.println("Average age: " + averageAge); System.out.println("Average age: " + averageAge); //-- Find the youngest and oldest person ------// Person youngest, //points to the youngest person oldest; //points to the oldest person oldest; //points to the oldest person youngest = person[0]; oldest = person[0]; oldest = person[0];
33
for (int i = 1; i < person.length; i++) { if ( person[i].getAge() < youngest.getAge() ) { if ( person[i].getAge() < youngest.getAge() ) { //found a younger person //found a younger person youngest = person[i]; youngest = person[i]; } else if (person[i].getAge() > oldest.getAge() ) { else if (person[i].getAge() > oldest.getAge() ) { //found an older person //found an older person oldest = person[i]; oldest = person[i]; }} System.out.println("Oldest: " + oldest.getName() + " is " + oldest.getAge() + " years old."); + " is " + oldest.getAge() + " years old."); System.out.println("Youngest: " + youngest.getName() + " is " + youngest.getAge() + " years old.");
34
Fig. 10.6 An array of Person objects with two Person variables. An array of Person objects with two Person variables.
35
Deleting object How do we delete an object? How do we delete an object? tms[x] = null; Remember garbage collection takes any objects no longer being referenced to (i.e. can never be accessed again) Remember garbage collection takes any objects no longer being referenced to (i.e. can never be accessed again)
36
8.3 Wrappers
37
Wrapper classes Allow us to treat primitives as objects Allow us to treat primitives as objects Each wrapper class has a primitive data member Each wrapper class has a primitive data member
39
8.4 Enhanced for Loop The traditional for loop – iterating through arrays The traditional for loop – iterating through arrays double[] data =...; double sum = 0; for (int i = 0; i < data.length; i++) { double e = data[i]; sum = sum + e; }
40
8.5 Simple Array Methods Finding Average Finding Average double[] scores =...//Get scores from user double avg = 0; for(int i = 0; i < scores.length; i++){ avg += scores[i]; } avg = avg / scores.length;
41
Count double[] scores =...//Get scores from user double avg = 0; for(int i = 0; i < scores.length; i++){ avg += scores[i]; } avg = avg / scores.length; int count = 0; for(int i = 0; i < scores.length; i++){ if(scores[i] >= avg){ count++;}}
42
Find Value double[] scores =...//Get scores from file double search =...//Get value to search from user boolean found = false; for(int j = 0; j < scores.length; j++) { if(Math.abs(scores[j],search) <= 1E-14) { found = true; }}
43
Maximum/Minimum double max = scores[0]; double min = scores[0]; for(int i = 1; i < scores.length; i++) { if(scores[i] > max) { max = scores[i]; } else if(scores[i] < min) else if(scores[i] < min){ min = scores[i]; }}
44
For Objects public class Bank { public int count(double atLeast) { int matches = 0; for (int j = 0; j = atLeast) matches++; // Found a match } return matches; }... private BankAccount[] accounts; }
45
For Objects public class Bank { public BankAccount find(int accountNumber) { for (int j = 0; j < accounts.length; j++) { if (accounts[j].getAccountNumber() == accountNumber) // Found a match return accounts[j]; } return null; // No match in the array list } }
46
For Objects public BankAccount maximum() { if (accounts.length == 0) return null; BankAccount largestYet = accounts[0]; for (int i = 1; i largestYet.getBalance()) largestYet = a; } return largestYet; }
47
10.5 Dimensional Arrays So far: Only one dimensional arrays So far: Only one dimensional arrays Many problems may require us to represent data in a “table” format, or along two-dimensions Many problems may require us to represent data in a “table” format, or along two-dimensions Two-dimensional arrays Two-dimensional arrays What do we need to add? What do we need to add?
48
2D Arrays Two indices – x and y Two indices – x and y Example: Example: We have multiple students, and each student has multiple scores – row for student, column for test We have multiple students, and each student has multiple scores – row for student, column for test int[][] scores; scores = new int[numStudents][numTests];
49
10.5 Two-Dimensional Arrays To declare our example array, we state: double[][] payScaleTable; or double payScaleTable[][]; and create the array as payScaleTable = new double[4][5];
50
Fig. 10.16 Wu Accessing an element of a two- dimensional array. Accessing an element of a two- dimensional array.
51
2D Arrays Arrays are a specific structure Arrays are a specific structure Two dimensional arrays are not Two dimensional arrays are not They are an array of arrays They are an array of arrays How do you check number of rows? Columns? (using the length member) How do you check number of rows? Columns? (using the length member)
52
10.5 Two-Dimensional Arrays The sample array creation The sample array creation payScaleTable = new double[4][5]; is a shorthand for payScaleTable = new double [4][ ]; payScaleTable[0] = new double [5]; payScaleTable[1] = new double [5]; payScaleTable[2] = new double [5]; and so on. and so on.
53
Fig. 10.17A Wu Executing the statements on the left in sequence will create the array of arrays shown on the right. Executing the statements on the left in sequence will create the array of arrays shown on the right.
55
10.5 Two-Dimensional Arrays The expression payScaleTable.length refers to the length of the payScaleTable array itself.
56
10.5 Two-Dimensional Arrays The expression The expressionpayScaleTable[1].length refers to the length of the array stored at row 1 of payScaleTable. refers to the length of the array stored at row 1 of payScaleTable.
57
How do you “traverse”, or go through the elements of an multidimensional array? How do you “traverse”, or go through the elements of an multidimensional array? Row-major order (first row first, etc) Row-major order (first row first, etc) Column-major order (first column first, etc) Column-major order (first column first, etc) We can make higher-dimensional arrays (3, 4, or more) the same way we make 2D arrays We can make higher-dimensional arrays (3, 4, or more) the same way we make 2D arrays
58
8.7 Copying Arrays Arrays are reference variables, treat like other objects Arrays are reference variables, treat like other objects Copying an array variable yields a second reference to the same array Copying an array variable yields a second reference to the same array double[] data = new double[10]; // fill array... double[] prices = data;
60
Clone Use clone to make true copy Use clone to make true copy double[] prices = (double[]) data.clone(); //Note clone returns an object, so we type // cast
62
Copying Elements System.arraycopy() not encouraged System.arraycopy() not encouraged Hard to manipulate Hard to manipulate Using for loops is more powerful Using for loops is more powerful
63
Copying certain elements How do I copy count positions from array from to array to, starting at positions fromStart and toStart respectively?
64
Common use: insert //insert x in position i of newData //we already have an array called int newData = new int[data.length+1]; // // //insert the new element newData[i] = x; // // data = newData;
65
Common use: insert //insert x in position i of newData //we already have an array called int newData = new int[data.length+1]; // // for (int pos=0; pos<i; pos++) newData[pos] = data[pos]; //insert the new element newData[i] = x; // // data = newData;
66
Common use: insert //insert x in position i of newData //we already have an array called int newData = new int[data.length+1]; // // for (int pos=0; pos<i; pos++) newData[pos] = data[pos]; //insert the new element newData[i] = x; // // for (int pos=i+1; pos<newData.length; pos++) newData[pos] = data[pos-1]; data = newData;
67
Growing array If the array is full and you need more space, you can grow the array If the array is full and you need more space, you can grow the array Create a new, larger array. Create a new, larger array. double[] newData = new double[2 * data.length]; Copy all elements into the new array Copy all elements into the new array Store the reference to the new array in the array variable Store the reference to the new array in the array variable data = newData; data = newData;
69
Passing Arrays to Methods Exactly the same as objects, the reference is passed to method parameters Exactly the same as objects, the reference is passed to method parameters And for returning an object And for returning an object length is especially important in methods, since we have no other way of knowing the size(except sending another parameter) length is especially important in methods, since we have no other way of knowing the size(except sending another parameter)
70
Passing Arrays to Methods public int searchMinimum(double[] number) { int indexOfMinimum = 0; for (int i = 1; i < number.length; i++){ if (number[i] < number[indexOfMinimum]) { if (number[i] < number[indexOfMinimum]) { //found a smaller element //found a smaller element indexOfMinimum = i; } } return indexOfMinimum; } To call this method (from a method of the same class), we write
71
Passing Arrays to Methods double[] arrayOne; //create and assign values to arrayOne... //get the index of the smallest element of arrayOne int minOne = searchMinimum(arrayOne); //output the result System.out.print(“Minimum value in Array One is ”); System.out.print(arrayOne[minOne] + “at position ” + minOne);...
72
Fig. 10.9B Wu Passing an array to a method means we are passing a reference to an array. Passing an array to a method means we are passing a reference to an array.
73
Adv 8.4 Partially Filled Arrays Use partially filled arrays to deal with sets where size is not known before hand Use partially filled arrays to deal with sets where size is not known before hand MUST keep track of capacity and size to ensure array does not get overfilled MUST keep track of capacity and size to ensure array does not get overfilled Make size large Make size large Either resize array or enforce a limit when full Either resize array or enforce a limit when full
74
int capacity = 100; double[] data = new double[capacity]; int dataSize = 0; boolean stop = false; while(!stop){ System.out.print(“Enter data: “); if(in.hasNextDouble()){ double x = in.nextDouble();
75
if(dataSize >= capacity) { capacity *= 2; double[] newData = new double[capacity]; for(int i = 0; i < data.length; i++) newData[i] = data[i]; data = newData; } data[dataSize] = x; dataSize++;}else{ stop = true; }}
76
©2001 Deb Deppeler. All rights reserved. Example: Candy in a Machine Create the 2D array with 3 rows and 5 columns. Create the 2D array with 3 rows and 5 columns. Assign prices to each item. Assign prices to each item. machine[r][c] = ??.50.75.45.60.85.90.80.55.70.65.40.951.10.30.35 c=0 1 2 3 4 r=0 1 2
77
©2001 Deb Deppeler. All rights reserved. Example: Candy in a Machine Write a code fragment to increase the price of all items by 5 cents. Write a code fragment to increase the price of all items by 5 cents. for ( int i=0; i < machine.length; i++ ) for ( int j=0; j < machine[i].length; j++ ) for ( int j=0; j < machine[i].length; j++ ) machine[i][j] = machine[i][j] + 0.05; machine[i][j] = machine[i][j] + 0.05;
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.