Download Objects First With Java

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Grouping Objects
Arrays and for loops
Fixed-Size Collections
• Sometimes the maximum collection size
is known.
• Programming languages usually offer a
special fixed-size collection type: the
array.
• Java arrays can store objects or
primitive values.
• Arrays use a special syntax.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
The weblog-analyzer Project
• A web server records details of each
access.
• It supports webmaster tasks:
•
•
•
•
Most popular pages
Busiest periods
How much data is being delivered
Broken references
• It analyses accesses by hour.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Creating an Array Object
public class LogAnalyzer
{
private int[] hourCounts;
Array variable declaration
private LogfileReader reader;
Array object construction
public LogAnalyzer()
{
hourCounts = new int[24];
reader = new LogfileReader();
}
...
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
The hourCounts Array
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Using an Array
Square-brackets notation is used to access an
array element - e.g.
hourCounts[hour]
where hour must be an integer variable holding a
valid index to the hourCounts array (0..23).
Array elements are used just like variables. They
can be assigned:
hourCounts[hour] = 42;
Or used in expressions:
adjusted = 2*(hourCounts[hour] - 3);
System.out.println (hourCounts[hour]);
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Using an Array
private int[] hourCounts;
private Person[] students;
declaration
...
hourCounts = new int[24];
students = new Person[100];
construction
...
hourcounts[i] = 0;
students[j].enroll ("Co320-S");
System.out.println (hourcounts[i]);
use
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Special Syntax for Array Literals
declaration and
initialisation
private int[] numbers = {3, 15, 4, 5};
...
System.out.println (numbers[i]);
Array literals can only be used in initialisations
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Special Syntax for Array Literals
declaration and
initialisation
private int[] numbers = {3, 15, 4, 5};
...
no brackets!
int n = numbers.length;
Note:literals
‘length’
a field
of the
array object
Array
can is
only
be used
in initialisations
Unlike ‘length()’, which is a method of String
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Special Syntax for Array Literals
declaration and
initialisation
private int[] numbers = {3, 15, 4, 5};
...
no brackets!
int n = numbers.length;
Note:literals
‘length’
a field
of the
array object
Array
can is
only
be used
in initialisations
Unlike
Unlike‘size()’,
‘length()’,
which
which
is aismethod
a method
of ArrayList
of String
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
The for Loop
• There are two variations of the for loop,
for-each (already seen) and for.
• The for loop is often used to iterate a
fixed number of times.
• It is usually used with a control variable
that changes a fixed amount on each
iteration.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Structure of the for Loop
loop header
for (initialisation; condition; post-body action) {
... loop body
}
Statement(s) to be repeated
Equivalent while-loop form:
initialisation;
while (condition) {
... loop body
... post-body action
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
An Example
for loop version
for (int hour = 0; hour < hourCounts.length; hour++) {
System.out.println (hour + ": " + hourCounts[hour]);
}
Note: variable hour no longer exists here …
while loop version
int hour = 0;
while (hour < hourCounts.length) {
System.out.println(hour + ": " + hourCounts[hour]);
hour++;
}
Note: variable hour still exists here …
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Practice
Given an array of numbers, print out all the numbers
in the array – one number per line. Use a for loop:
int[] numbers = {4, 1, 22, 9, 14, 3, 9};
for ( ... ) {
...
}
Write this now!
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Practice
Given an array of numbers, print out all the numbers
in the array – one number per line. Use a for loop:
int[] numbers = {4, 1, 22, 9, 14, 3, 9};
for (int
...i )= {0; i < numbers.length; i++) {
...
System.out.println
(numbers[i]);
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Practice
Actually,
Given
an arrays
array ofalso
numbers,
count as
print
collections
out all the
– so
numbers
we
in the
can
usearray
a for-each
– one number
loop onper
them:
line. Use a for loop:
int[] numbers = {4, 1, 22, 9, 14, 3, 9};
for (int i = 0; i < numbers.length; i++) {
System.out.println (numbers[i]);
}
for (int n : numbers) {
System.out.println (n);
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Warning !!!
Collection (or array) elements accessed through a
for-each loop are copies of the actual elements:
for (int n : numbers) {
System.out.println (n);
}
But don’t try assigning to them:
for (int n : numbers) {
n = 2*n;
}

Changes copies of elements in
numbers – does not change any of the
elements in numbers itself!

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Warning !!!
But don’t try assigning to them:
for (int n : numbers) {
n = 2*n;
}

Changes copies of elements in
numbers – does not change any of the
elements in numbers itself!

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Warning !!!
But don’t try assigning to them:
for (int n : numbers) {
n = 2*n;
}

Changes copies of elements in
numbers – does not change any of the
elements in numbers itself!

To do this, we must use a for loop:
for (int i = 0; i < numbers.length; i++) {
numbers[i] = 2*numbers[i];
}

Changes the elements in
numbers itself!

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Practice
Fill an array with the first 100 numbers of the Fibonacci
sequence.
Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
(each number is the sum of the previous two numbers)
(start with zero and one)
int[] fib = new int[100];
fib[0] = 0; fib[1] = 1;
for ( ... ) {
...
}
Write this now!
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Practice
Fill an array with the first 100 numbers of the Fibonacci
sequence.
Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
(each number is the sum of the previous two numbers)
(start with zero and one)
int[] fib = new int[100];
fib[0] = 0; fib[1] = 1;
Cannot be written
with a for-each loop.
for (int
...i )= {2; i < fib.length; i++) {
...
fib[i]
= fib[i-2] + fib[i-1];
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
for loops can have
any size of increment
// Print multiples of 3 that are below 40.
for (int num = 3; num < 40; num = num + 3) {
System.out.println (num);
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
while loop without a collection
// Print all even numbers from 0 to 42 inclusive.
int index = 0;
while (index <= 42) {
System.out.println (index);
index = index + 2;
}
// Programming error? This does nothing at all!
int index = 0;
while (index >= 42) {
System.out.println (index);
index = index + 2;
}
// Programming error? This loop never ends!
int index = 0;
while (index <= 42) {
System.out.println (index);
index = index - 2;
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
The same – but with for loops
// Print all even numbers from 0 to 42 inclusive.
for (int index = 0; index <= 42; index = index + 2) {
System.out.println (index);
}
// Programming error? This does nothing at all!
for (int index = 0; index >= 42; index = index + 2) {
System.out.println (index);
}
// Programming error? This loop never ends!
for (int index = 0; index <= 42; index = index - 2) {
System.out.println (index);
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
for loops can exit early
/**
* Search an array for a zero.
*
* @return The index of the first zero element
*
(if none found, return -1)
*/
public int findZero (int[] A)
{
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == 0) {
return i;
}
}
return -1;
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Review
• Arrays are appropriate where a fixed-size
collection is required.
• Arrays use special [square brackets] syntax.
• For loops are a better alternative to while loops
when the number of repetitions is known.
• For loops are often used to introduce and control
an index variable when iterating through arrays.
• For loops can exit early (with a return).
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Related documents