+ All Categories
Home > Documents > OOP with Java, David J. Barnes Arrays and Further Control Structures1 Grouping Related Items We...

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

Date post: 12-Jan-2016
Category:
Upload: allison-lloyd
View: 213 times
Download: 0 times
Share this document with a friend
31
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).
Transcript
Page 1: 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.

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

Page 2: 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.

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

Page 3: 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.

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[...]

Page 4: 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.

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

Page 5: 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.

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 (!).

Page 6: 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.

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

Page 7: 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.

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

Page 8: 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.

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

Page 9: 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.

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

Page 10: 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.

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.

Page 11: 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.

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,});

Page 12: 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.

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

Page 13: 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.

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();}

Page 14: 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.

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.

Page 15: 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.

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.

Page 16: 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.

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

Page 17: 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.

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

Page 18: 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.

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.

Page 19: 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.

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

Page 20: 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.

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

Page 21: 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.

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.

Page 22: 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.

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.

Page 23: 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.

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' },};

Page 24: 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.

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

Page 25: 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.

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.

Page 26: 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.

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.

Page 27: 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.

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

}

Page 28: 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.

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

Page 29: 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.

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

Page 30: 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.

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.

Page 31: 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.

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.


Recommended