OOP with Java, D avid J. Barnes Arrays and Further Contro l Structures 1 Grouping Related Items • We often need to group together related items of data. – Cards in a pack. – Ships in a port. • Java provides two distinct facilities: – Fixed-size arrays. – Flexible-size collection classes (java.util).
31
Embed
OOP with Java, David J. Barnes Arrays and Further Control Structures1 Grouping Related Items We often need to group together related items of data. –Cards.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
OOP with Java, David J. Barnes
Arrays and Further Control Structures
1
Grouping Related Items
• We often need to group together related items of data.– Cards in a pack.– Ships in a port.
Problems That Arrays Solveclass YearlyRainfall { public int meanMonthlyRainfall(){ return (getJan()+getFeb()+getMar()+getApr()+ getMay()+getJun()+getJul()+getAug()+ getSep()+getOct()+getNov()+getDec()) /
numMonths; }
public int getJan(){ return Jan; } ... private static final int numMonths = 12; private int Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec;}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
3
Arrays for Primitive-Typesclass YearlyRainfall { ... // Fixed size of the rainfall array. private static final int numMonths = 12; // Declare an attribute to hold the monthly // rainfall figures. private int[] rainfall = new int [numMonths];}
• Square bracket notation is distinctive of arrays:• Type: int[]• Construction: new int[...]
OOP with Java, Eric Jul Arrays and Further Control Structures
4
Initial value for Primitive-Types
Each individual array element is initialized with the default value of the base type:
Arrays for Objectsclass CardGame { ... // There are four distinct suits in this game. final int numSuits = 4; // An array for the names of the distinct suits. private String[] suitNames = new String[numSuits];}
• NB: No String objects are created. Only a container for Strings.• Each location is initialized to null (!).
OOP with Java, David J. Barnes
Arrays and Further Control Structures
6
Array Lengths
• The length of an array is fixed on construction.
• Each array object has a public final length attribute.
• The individual elements of an array are always indexed from zero to (length-1).
• Individual elements initialized to default value of base type (e.g., 0, false, null, etc.)
OOP with Java, David J. Barnes
Arrays and Further Control Structures
7
Indexing an Array// Store the rainfall figure for January.rainfall[0] = 30;...// Compare the December and November figures.if(rainfall[11] > rainfall[10]){ System.out.println(
"December was wetter than November.");}...// Correct an error of 1 millimeter in March's// rainfall total.rainfall[2]++;
OOP with Java, David J. Barnes
Arrays and Further Control Structures
8
Accessors for Array Attributesclass YearlyRainfall { ... // Return a reference to the array. public int[] getRainfall(){ // Independent copy not returned! return rainfall; } ... // Fixed size of the rainfall array. private static final int numMonths = 12; // Declare an attribute to hold the monthly // rainfall figures. private int[] rainfall = new int [numMonths];}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
9
Mutators for Array Attributesclass Polyline { public Polyline(Point[] p){ setPoints(p); } ... public void setPoints(Point[] p){ if(p != null){ // Independent copy not taken! points = p; } }
private Point[] points = null;}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
10
Initializing Arraysclass AssignmentMonitor { ... // Differentially weight the assignments. private int[] assignmentWeights = { 1, 2, 1, 5, 1, }; private final int numAssignments = assignmentWeights.length;}
• No new required.• Terminating semicolon.• Optional final comma.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
11
Further Initializer ExamplesString[] suitNames = { "Spades", "Hearts", "Diamonds", "Clubs"};
Point[] vertices = { new Point(0,0), new Point(0,1), new Point(1,1), new Point(1,0),};
YearlyRainfall y2k = new YearlyRainfall( new int[]{10,10,8,8,6,4,4,0,4,4,7,10,});
OOP with Java, David J. Barnes
Arrays and Further Control Structures
12
Using For Loops with Arrays
public int totalRainFall(){ // Obtain the data values. final int[] monthlyValues = getRainfall(); int totalRain = 0; final int numMonths = monthlyValues.length; for(int month = 0; month < numMonths; month++){ totalRain += monthlyValues[month]; } return totalRain;}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
13
Iterating over an Array in Reverse
public void printInReverse(){ final double[] numbers = getMarks(); for(int index = numbers.length-1; index >= 0; index--){ System.out.print(numbers[index]+" "); } System.out.println();}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
14
Initializer Blocksprivate final int numSeats = 150;// The status of seats in a theater.// true means the seat is free, false means occupied.private boolean[] seatStatus = new boolean[numSeats];{ // All seats are free to start with. for(int i = 0; i < numSeats; i++){ seatStatus[i] = true; }}
• Static initializers are available to initialize static fields.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
15
The Main Method Array Argument
• Used to access command line argument values:– java PrintArguments x y z
• The strings "x", "y" and "z" are placed in the main method's args argument.
• If there are no arguments, the length of args is zero.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
16
Using Command Line Arguments
class LookupWords { public static void main(String[] args) { GlossaryManager glossary = new GlossaryManager();
for(int n = 0; n < args.length; n++){ System.out.println("Looking up "+args[n]); System.out.println( glossary.definition(args[n])); } }}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
17
Copying Arrays
// Make a copy of the Point data.public void setPoints(Point[] p){ if(p != null){ final int numPoints = p.length; points = new Point[numPoints]; // Copy from p to points. System.arraycopy(p,0,points,0,numPoints); }}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
18
Searching an Unsorted Array
• We often need to search an array for a particular item of data.
• The data is often unsorted.
• The item might or might not be present.– Care must be taken not to search beyond the
end of the array.– We need to decide how to return a found item.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
19
Search with Multiple Returns
public int indexOf(int[] numbers,int value){ final int notPresent = -1; for(int index = 0; index < numbers.length; index++){ if(numbers[index] == value){ return index; } } // We did not find it. return notPresent;}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
20
Search with a Single Returnpublic int indexOf(int[] numbers,int value){ final int notPresent = -1; int index = 0; boolean found = false; while((index < numbers.length) && !found){ if(numbers[index] == value){ found = true; } else{ index++; } } return found ? index : notPresent;}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
21
The Arrays Class
• Defined in the java.util package.
• Contains static methods for manipulating arrays:– binarySearch: search for a value.– equals: compare the contents of two arrays.– fill: fill an array with a particular value.– sort: sort the contents of an array.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
22
Multi-Dimensional Arrays
• Arrays of multiple dimensions are possible.– 2D grid, for a board game such as chess.– 3D cube structure, etc.
• Multi-dimensional arrays are regarded as being arrays of arrays.
• Non-rectangular structures are possible.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
23
2D Array Constructionfinal int numRows = 10, numCols = 5;double[][] matrix = new double[numRows][numCols];
double[][] grid = new double[numRows][];for(int row = 0; row < grid.length; row++){ grid[row] = new double[numCols];}
• Java defines several further statements that affect a program's flow of control.– The Switch Statement– The Break Statement– The Continue Statement
• Statements may also be labelled.– We rarely use this feature.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
26
The Switch Statement
• An integer expression is used to select a case label.
• Case labels are integer constant expressions.
• A default label provides a no-match option.
• Labels mark statements to be executed on selection.– A break statement is used to end a case.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
27
The Switch Statement (cont.)public void menuAction(char choice){ switch(choice){ case 'd': delete(); break; case 'i': insert(); break; case 'h': help(); break; default: System.out.println("Unknown command: "+choice); break; }
}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
28
The Break Statementpublic int indexOf(int[] numbers,int value){ final int notPresent = -1; int index; boolean found = false; for(index = 0; index < numbers.length; index++){ if(numbers[index] == value){ found = true; // Leave now - before index is incremented. break; } } return found ? index : notPresent;}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
29
The Continue Statementpublic void skipPrinting(int x, int y, int z){ for(int num = 1; num <= 100; num++){ if((num % x) == 0){ continue; } if((num % y) == 0){ continue; } if((num % z) == 0){ continue; } // This one isn't divisible by them. System.out.println(num); }}
OOP with Java, David J. Barnes
Arrays and Further Control Structures
30
Labeled Statements
• Any statement may be preceded by a label:– identifier:
• Labels may be the target of break and continue statements.– There is no goto statement in Java.
• This simplifies breaking out of deeply nested loops.– This feature should be used with caution.
OOP with Java, David J. Barnes
Arrays and Further Control Structures
31
Review
• Arrays make it possible to group related items in a single object.
• An array's length is fixed on construction.
• Arrays may have multiple dimensions.
• The Switch, Break and Continue statements provide further flow control capabilities.