OOP with Java, David J. Barnes Arrays and Further Control Structures1 Grouping Related Items We...

Post on 12-Jan-2016

213 views 0 download

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.

• Java provides two distinct facilities:– Fixed-size arrays.– Flexible-size collection classes (java.util).

OOP with Java, David J. Barnes

Arrays and Further Control Structures

2

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:

int, long, short, char 0double, float 0.0Boolean false

OOP with Java, David J. Barnes

Arrays and Further Control Structures

5

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];}

char[][] hiddenWord = { { 'd', 'g', 'i', 'b' }, { 'e', 'i', 'u', 'm' }, { 't', 'a', 's', 'a' },};

OOP with Java, David J. Barnes

Arrays and Further Control Structures

24

Non-Rectangular Arrays

final int numRows = 5;int[][] triangle = new int[numRows][];for(int row = 0; row < numRows; row++){ triangle[row] = new int[row+1];}

int[][] pascalsTriangle = { {1}, {1,1}, {1,2,1}, {1,3,3,1},};

OOP with Java, David J. Barnes

Arrays and Further Control Structures

25

Further Control Statements

• 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.

• Labeled statements should be used sparingly.