Chap09

advertisement
Chapter 9
Arrays
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
2
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
3
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 onedimensional array
4
Skill Goals
• Declare a two-dimensional array
• Perform fundamental operations on a twodimensional 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
5
Java Data Types
6
Java Data Types
Try expressing these definitions in words
7
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
8
Is a class structured?
Java Data Types
class Example
{
int field1;
int field2;
double field3;
}
class Example
{
double field3;
int field2;
int field1;
}
Changing the order does not change the access
Is a class structured?
Did you change your answer?
9
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)
10
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
11
Array
 composite, unstructured
 composite, structured
 heterogeneous
 homogeneous
 access by field name
 access by position
One-Dimensional Arrays
Declare
Instantiate
12
One-Dimensional Arrays
int[] numbers = new int[4];
What
type of
values
can be
stored in
each cell
?
13
One-Dimensional Arrays
float[] realNumbers = new float[10];
How
do you
get
values
into the
cells
?
14
One-Dimensional Arrays
Array Initializers
int[] numbers = {4.93, -15.2, 0.5, 1.67};
Initializers
do the
instantiation
and
storing in
with the
declaration
15
One-Dimensional Arrays
Accessing Individual Components
Indexing expression
16
One-Dimensional Arrays
Indexing
Expression
Place into which
a value is stored;
value is changed
17
Indexing
Expression
Place from which
a value is extracted;
value is not changed
One-Dimensional Arrays
What
happens
if you
try to
access
value[1000]
?
18
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
19
One-Dimensional Arrays
Aggregate Array Operations
What does the following expression return?
numbers == values
20
One-Dimensional Arrays
Now, what does the following expression return?
numbers == values
21
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?
22
More Examples
What does this
code segment do?
totalOccupants = 0;
for (int aptNo = 0; aptNo < occupants.length; aptNo++)
totalOccupants = totalOccupants +occupants[aptNo];
23
More Examples
What does
this code
fragment
do
?
if ((letter >= 'A' && letter <= 'Z' ||
letter >= 'a' && letter <= 'z'))
{
index = (int)Character.toUpperCase(letter) - (int)'A';
lettrCount[index] = letterCount[index] + 1;
}
24
Arrays of Objects
String[] groceryItems = new String[10];
for (index = 0; index < grocerItems.length;
{
groceryItems[index] = inFile.nextLine();
}
25
index++)
Arrays of Objects
Expression
groceryItems
array
groceryItems[0]
groceryItems[0].charAt()
groceryItems[10]
Class/Type
Reference to an
Reference to a string
A character
Error
Base address
The memory address of the first element of the array
"Reference to" is the base address
26
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()) ?
27
Arrays of Objects
Date[] bigEvents = new Date[10];
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
[0]
[1]
.
.
.
.
Date
.
.
.
.
.
Date
[9]
28
.
.
.
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
29
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?
30
Arrays of Objects
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;
}
What is passed as an argument?
31
Two-Dimensional Arrays
Twodimensional
arrays
can be
used to
represent
tables
such as
this map
32
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
33
Two-Dimensional Arrays
34
Two-Dimensional Arrays
35
Two-Dimensional Arrays
Can you predict how each item is accessed?
36
Two-Dimensional Arrays
37
Two-Dimensional Arrays
Actual Java implementation
38
Two-Dimensional Arrays
hiTemp.length is the number of rows
hiTemp[2].length is the number of columns in row two
39
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?
40
Two-Dimensional Arrays
Subarray processing by row
41
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);
}
42
Two-Dimensional Arrays
Subarray processing by column
43
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);
}
44
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)?
45
Two-Dimensional Arrays
Initializer Lists
int[][] hits
=
{{
{
{
{
2,
1,
1,
0,
1,
1,
0,
1,
0,
2,
0,
2,
3, 2 },
3 },
0, 0 },
1, 1 }};
hits
[0]
46
[1] [2] [3] [4]
2
1
0
3
2
1
1
2
3
1
0
0
0
0
0
1
2
1
1
Three-Dimensional Arrays
47
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
Extras
I loved to
give talks to
young people;
I used colored
wires to
demonstrate
different
computer
speeds
Who am I?
48
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
49
Extras - GUI Track
50
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
51
Extras - GUI Track
JFrame
object
with a
text field
52
Download