Arrays of Objects

Download Report

Transcript Arrays of Objects

Chapter 9 (part of)
Single-dimensional 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
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
3
Java Data Types
4
Java Data Types
Try expressing these definitions in words
5
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
6
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?
7
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)
8
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
9
Array
 composite, unstructured
 composite, structured
 heterogeneous
 homogeneous
 access by field name
 access by position
One-Dimensional Arrays
Declare
Instantiate
10
One-Dimensional Arrays
int[] numbers = new int[4];
What
type of
values
can be
stored in
each cell
?
11
One-Dimensional Arrays
float realNumbers[] = new float[10];
How
do you
get
values
into the
cells
?
12
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
13
One-Dimensional Arrays
Accessing Individual Components
Indexing expression
14
One-Dimensional Arrays
Indexing
Expression
Place into which
a value is stored;
value is changed
15
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]
?
16
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
17
One-Dimensional Arrays
Aggregate Array Operations
What does the following expression return?
numbers == values
18
One-Dimensional Arrays
Now, what does the following expression return?
numbers == values
19
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?
20
More Examples
What does this
code segment do?
totalOccupants = 0;
for (int aptNo = 0; aptNo < occupants.length; aptNo++)
totalOccupants = totalOccupants +occupants[aptNo];
21
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;
}
22
Arrays of Objects
String groceryItems[] = new String[10];
for (index = 0; index < grocerItems.length;
{
groceryItems[index] = inFile.nextLine();
}
23
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
24
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()) ?
25
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]
26
.
.
.
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
27
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?
28