Chapter 9 Arrays. 2 Knowledge Goals Understand the difference between atomic and composite data...

Preview:

Citation preview

Chapter 9

Arrays

2

Knowledge Goals

• Understand the difference between atomic and composite data types

• Understand the difference between unstructured and structured composite data types

• Know how Java implements arrays• Know how an array is passed as an argument

3

Knowledge Goals

• Understand the difference between an array and the information stored or referenced within the array

• Understand the role of an array in structuring data within a problem

• Understand the role of a two-dimensional array in representing a table with rows and columns

• Know how a two-dimensional array is constructed as an array of arrays

4

Skill Goals

• Declare and instantiate a one-dimensional array

• Access and manipulate the individual components in a one-dimensional array where the elements are• Atomic types• Composite types

• Use an initializer list to instantiate a one-dimensional array

5

Skill Goals

• Declare a two-dimensional array• Perform fundamental operations on a two-

dimensional array:• Access a component of the array• Process the array by rows• Process the array by columns

• Declare a two-dimensional array as a parameter

• Declare and process a multidimensional array

6

Java Data Types

7

Java Data Types

Try expressing these definitions in words

8

Java Data Types

Composite data type

A data type that allows a collection of values to be associated with an identifier of that type

Unstructured data type

A collection of components that are not organized with respect to one another

Structured data type

An organized collection of components; the organization determines the means used to access individual components

Is a class structured?

9

Java Data Types

class Example

{

int field1;

int field2;

double field3;

}

class Example

{

double field3;

int field2;

int field1;

}

Is a class structured? Did you change your answer?

Changing the order does not change the access

10

One-Dimensional Arrays

Data structure

The implementation of a composite data type

Note the difference between a data structure (implementation of any composite type) and a structured data type (a composite type that is structured)

11

One-Dimensional Arrays

One-dimensional array

A structured collection of components, all of the same type, that is given a single name; each component is accessed by an index that indicates the component's position within the collection

Class

composite, unstructured

heterogeneous

access by field name

Array

composite, structured

homogeneous

access by position

12

One-Dimensional Arrays

Declare

Instantiate

13

One-Dimensional Arrays

int[] numbers = new int[4];

Whattype ofvaluescan be

stored ineach cell

?

14

One-Dimensional Arrays

float[] realNumbers = new float[10];

How do you

getvaluesinto the

cells?

15

One-Dimensional Arrays

Array Initializersint[] numbers = {4.93, -15.2, 0.5, 1.67};

Initializersdo the

instantiationand

storing inwith the

declaration

16

One-Dimensional Arrays

Accessing Individual Components

Indexing expression

17

One-Dimensional Arrays

IndexingExpression

IndexingExpression

Place into whicha value is stored;value is changed

Place from whicha value is extracted;value is not changed

18

One-Dimensional Arrays

Whathappens

if youtry to

accessvalue[1000]

?

19

One-Dimensional Arrays

Out-of-bounds array index

An index that is either less than 0 or greater than the array size minus 1, causing an ArrayIndexoutOfBoundsException to be thrown

Length

A public instance variable associated with each instantiated array, accessed by array name .length

Use length to avoid out-of-bounds indexes

20

One-Dimensional Arrays

Aggregate Array Operations

What does the following expression return?

numbers == values

21

One-Dimensional Arrays

Now, what does the following expression return?

numbers == values

22

One-Dimensional Arrays

System provides two useful array methods

first = second.clone(); // duplicates second import java.util.Arrays;

Arrays.equals(first, second); // item-by-item check

System.out.println(first == second);

System.out.println(Arrays.equals(first, second);

What is printed?

23

More Examples

What does this code segment do?

totalOccupants = 0;

for (int aptNo = 0; aptNo < occupants.length; aptNo++)

totalOccupants = totalOccupants +occupants[aptNo];

24

More Examples

if ((letter >= 'A' && letter <= 'Z' || letter >= 'a' && letter <= 'z')){ index = (int)Character.toUpperCase(letter) - (int)'A'; lettrCount[index] = letterCount[index] + 1;}

What doesthis codefragment

do?

25

Arrays of Objects

String[] groceryItems = new String[10];

for (index = 0; index < grocerItems.length; index++)

{

groceryItems[index] = inFile.nextLine();

}

26

Arrays of Objects

Expression Class/TypegroceryItems Reference to an array

groceryItems[0] Reference to a string

groceryItems[0].charAt() A character

groceryItems[10] Error

Base address

The memory address of the first element of the array

"Reference to" is the base address

27

Arrays of Objects

How do Array.equals and clone operate with arrays of objects?

Array.equals uses the == operator to compare arrays, so the addresses are compared

clone uses the = operator, so the addresses are copied

Array.equals(numbers, numbers.clone()) ?

28

Date[] bigEvents = new Date[10];

Arrays of Objects

[ 0 ]

[ 1 ] .

.

.

[ 9 ]

bigEvents Expression Class/Type

bigEvents Array

bigEvents[0] Date

bigEvents[0].month String

bigEvents[0].day int

bigEvents[0].year int

bigEvents[0].month.charAt(0) char

Date. ..

Date. ..

Date. ..

29

Arrays of Objects

length is the number of slots assigned to the array

What if the array doesn’t have valid data in each of these slots?

Keep a counter of how many slots have valid data and use this counter when processing the array

More about this type of processing in Chapter 11

30

Arrays of Objects

The Vector class

A class available in java.util that offers functionality similar to that of a one-dimensional array of objects

Objects of class Vector can grow and shrink; the size is not fixed for its lifetime

However, internal resizing operations are time consuming

What do you think is the Vector class data structure?

31

public static double average(int[] grades)

// Calculates and returns the average grade in an

// array of grades.

// Assumption: All array slots have valid data.

{

int total = 0;

for (int i = 0; i < grades.length; i++)

total = total + grades[i];

return (double) total / (double) grades.length;

}

Arrays of Objects

What is passed as an argument?

32

Two-Dimensional Arrays

Two-dimensional

arrayscan beused to

representtables

such asthis map

33

Two-Dimensional Arrays

Two-dimensional array

A collection of homogeneous components,

structured in two dimensions (referred to as

rows and columns); each component is

accessed by a pair of indexes representing

the component’s position within each

dimension

34

Two-Dimensional Arrays

35

Two-Dimensional Arrays

36

Two-Dimensional Arrays

Can you predict how each item is accessed?

37

Two-Dimensional Arrays

38

Two-Dimensional Arrays

Actual Java implementation

39

Two-Dimensional Arrays

hiTemp.length is the number of rows

hiTemp[2].length is the number of columns in row two

40

Two-Dimensional Arrays

int[][] hiTemp = new int[6][12];

for (int col = 0; col < hiTemp[2].length; col++)

System.out.println(data[2][col]);

What is printed?

41

Two-Dimensional Arrays

Subarray processing by row

42

Two-Dimensional Arrays

for (int row = 0; row < rowsFilled; row++)

{

// Array is not ragged

total = 0;

for (int col = 0; col < colsFilled; col++)

total = total + data[row][col];

outFile.println("Row sum: " + total);}

43

Two-Dimensional Arrays

Subarray processing by column

44

Two-Dimensional Arrays

for (int col = 0; col < colsFilled; col++)

{

// Array is not ragged

total = 0;

for (int row = 0; row < rowsFilled; row++)

total = total + data[row][col];

outFile.println("Column sum: " + total);}

45

Two-Dimensional Arrays

When processing by row,

the outer loop is ______ (row, column)?

the inner loop is ______ (row, column)?

When processing by column,

the outer loop is ______ (row, column)?

the inner loop is ______ (row, column)?

46

int[][] hits = {{ 2, 1, 0, 3, 2 },

{ 1, 1, 2, 3 },

{ 1, 0, 0, 0, 0 },

{ 0, 1, 2, 1, 1 }};

[0] [1] [2] [3] [4]

Two-Dimensional Arrays

hits

Initializer Lists

2 1 0 3 2

1 1 2 3

1 0 0 0 0

0 1 2 1 1

47

Three-Dimensional Arrays

Array

A collection of homogeneous components ordered on N dimensions (N>=1); each component is accessed by N indexes, each of which represents the component's position within that dimension

48

Extras

I loved togive talks to

young people; I used colored

wires todemonstrate

differentcomputer

speeds

Who am I?

49

Extras - GUI Track

Rather than using JOptionPane, you can build your own window using class JFrame

JFrame outFrame = new JFrame();

outFrame consists of the outside of the window frame that holds controls and the content pane which shows the content

50

Extras - GUI Track

51

Extras - GUI Track

Handling your own window with JFrame requires

declaring and instantiating a JFrame object setting the size of the object declaring and getting a pane setting the layout manager for the pane adding text to the pane making the frame visible

52

Extras - GUI Track

JFrame objectwith a

text field

Recommended