Arrays Chapter 8 Spring 2007 CS 101

advertisement
Arrays
Chapter 8
Spring 2007
CS 101
Aaron Bloomfield
1
Introduction to arrays
2
Background
 Programmer often need the ability to represent a group of
values as a list
 List may be one-dimensional or multidimensional
 Java provides arrays and the collection classes
 The Vector class is an example of a collection class
 Consider arrays first
3
Example
 Definitions
char[] c;
int[] value = new int[10];
 Causes
 Array object variable c is un-initialized
 Array object variable value references a new ten element
list of integers
 Each of the integers is default initialized to 0
c
value
0
0
0
0
…
0
4
An array example
int[] v = new int[10];
int i = 7;
int j = 2;
int k = 4;
v[0] = 1;
v[i] = 5;
v[j] = v[i] + 3;
v[j+1] = v[i] + v[0];
v[v[j]] = 12;
System.out.println(v[2]);
v[k] = stdin.nextInt();
v
8 is displayed
Suppose
3 is extracted
0
1
0
0
8
0
6
0
3
0
0
0
5
12
0
0
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v[6]
v[7]
v[8]
v[9]
5
Array variable definition styles
 Without initialization
ElementType [ ] id;
Brackets
Name of
Type of
list
values in indicate array
variable being
list
defined
int [] a;
int a[];
6
Array variable definition styles
 With initialization
Nonnegative integer expression specifying the
number of elements in the array
ElementType [ ] id = new ElementType [n];
A new array of n
elements
7
Where we’ve seen arrays
 public static void main (String[] args)
 Thus, the main() method takes in a String array as the
parameter
 Note that you can also define it as:
 public static void main (String args[])
 or
 public static void main (String[] foobar)
8
Basic terminology
 List is composed of elements
 Elements in a list have a common name
 Example: a[3] = 5;
 The common name is ‘a’
 The list as a whole is referenced through the common name
 List elements are of the same type — the base type
 Elements of a list are referenced by subscripting (indexing) the
common name
9
Java array features
 Subscripts are denoted as expressions within brackets: [ ]
 Base (element) type can be any type
 Size of array can be specified at run time
 This is different that pure C! (for the most part, at least)
 Index type is integer and the index range must be 0 ... n-1
 Where n is the number of elements
 Just like Strings indexing!
 Automatic bounds checking
 Ensures any reference to an array element is valid
 Data field length specifies the number of elements in the list
 Array is an object
 Has features common to all other objects
 More on this later…
10
Today’s site of the day

Link of the day:
http://www.spiegel.de/international/zeitge
ist/0,1518,475454,00.html
11
Review of arrays
 Creating an array:
int[] foo = new int[10];
 Accessing an array:
foo[3] = 7;
System.out.print (foo[1]);
 Creating an array:
String[] bar = new String[10];
 Accessing an array:
bar[3] = “qux”;
System.out.println (bar[1]);
13
Consider
 Segment
int[] b = new int[100];
b[-1] = 0;
b[100] = 0;
 Causes
 Array variable to reference a new list of 100 integers
 Each element is initialized to 0
 Two exceptions to be thrown
 -1 is not a valid index – too small
 100 is not a valid index – too large
 IndexOutOfBoundsException
14
Consider
Point[] p = new Point[3];
p[0] = new Point(0, 0);
p[1] = new Point(1, 1);
p[2] = new Point(2, 2);
p[0].setX(1);
p[1].setY(p[2].getY());
Point vertex = new Point(4,4);
p[1] = p[0];
vertex
p[2] = vertex;
p
p[0]
p[1]
p[2]
null
null
null
Point: (1,
(0, 0)
Point: (4, 4)
Point: (1, 2)
1)
Point: (2, 2)
15
Explicit initialization
 Syntax
id references an array of n elements. id[0] has
value exp0, id[1] has value exp1, and so on.
ElementType []
id = {
exp0 , exp1 , ... expn-1 } ;
Each expi is an expression that
evaluates to type ElementType
16
Explicit initialization
 Example
String[] puppy = { “pika”, “mila”, “arlo”,
“nikki” };
int[] unit = { 1 };
 Equivalent to
String[] puppy = new String[4];
puppy[0] = “pika";
puppy[1] = “mila";
puppy[2] = “arlo";
puppy[3] = “nikki";
int[] unit = new int[1];
unit[0] = 1;
17
Array members
 Member length
 Size of the array
for (int i = 0; i < puppy.length; ++i) {
System.out.println(puppy[i]);
}
 Note that length is a field, not a method!
 I.e., it is not puppy.length()
18
Chapter 2: Computer bugs
19
Array members
 Member clone()
 Produces a shallow copy
Point[] u = { new Point(0, 0), new Point(1, 1)};
Point[] v = u.clone();
v[1] = new Point(4, 30);
u[0]
u[1]
u
Point: (0, 0)
v
Point: (1, 1)
Point: (4, 30)
20
v[0]
v[1]
Array members
 Member clone()
 Produces a shallow copy
Point[] u = { new Point(0, 0), new Point(1, 1)};
Point[] v = u.clone();
v[1].setX(10);
u[0]
u[1]
u
Point: (0, 0)
(1, 1)1)
Point: (10,
v
21
v[0]
v[1]
Making a deep copy
 We want to copy the array and all the objects each element
of the array references
 This is called a deep copy
 Example
Point[] w = new Point[u.length];
for (int i = 0; i < u.length; ++i) {
w[i] = (Point) u[i].clone();
}
22
Making a deep copy
u[0]
u[1]
u[2]
u
Point: (0, 0)
w[0]
w[1]
Point: (2, 1)
Point: (2, 2)
Point: (2, 1)
Point: (2, 2)
w[2]
w
Point: (0, 0)
23
How Java represents arrays
 Consider
int[] a = { 1, 2, 3, 4, 5 };
Array
- length = 5
a
- data =
1
1
2
2
3
4
3
5
4
5
+…
24
More about how Java represents Arrays
 Consider
int[] a;
int[] b = null;
int[] c = new int[5];
int[] d = { 1, 2, 3, 4, 5 };
a = c;
d = c;
a
-
b
null
c
0
0
0
0
0
d
1
2
3
4
5
25
Today’s demotivators
26
How are we doing with arrays?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
27
ArrayTools
28
ArrayTools.java
 We want to create a series of general utility methods to be
used for arrays
 We will put these into an ArrayTools class
29
ArrayTools.java – outline
public class ArrayTools {
// class constant
private static final int MAX_LIST_SIZE = 1000;
// sequentialSearch(): examine unsorted list for key
public static int sequentialSearch(int[] data, int key) { ...
// putList (): prints list to screen
public static void putList(int[] data) { ...
// getList(): extract and return up to MAX_LIST_SIZE values
public static int[] getList() { ...
// reverse(): reverses the order of the element values
public static void reverse(int[] list) { ...
// binarySearch(): examine sorted list for a key
public static int binarySearch(char[] data, char key) { ...
}
30
ArrayTools.java method putList()
 To print the array:
public static void putList(int[] data) {
for (int i = 0; i < data.length; ++i) {
System.out.println(data[i]);
}
}
 Consider
int[] score = { 6, 9, 82, 11, 29, 85, 11, 28, 91 };
putList(score);
31
ArrayTools.java method getList()
public static int[] getList() {
Scanner stdin = new Scanner (System.in);
int[] buffer = new int[MAX_LIST_SIZE];
int listSize = 0;
for (int i = 0; (i < MAX_LIST_SIZE) &&
stdin.hasNext(); ++i) {
buffer[i] = stdin.nextInt();
++listSize;
}
int[] data = new int[listSize];
for (int i = 0; i < listSize; ++i) {
data[i] = buffer[i];
}
return data;
}
32
ArrayTools.java method reverse()
public static void reverse(int[] data) {
int[] clone = data.clone();
for ( int i = 0; i < clone.length; ++i ) {
data[i] = clone[clone.length-1-i];
}
}
 Consider
int[] foo = { 1, 2, 3, 4, 5 };
reverse (foo);
putList (foo);
34
ArrayDemo.java
public class ArrayDemo {
// main(): application entry point
public static void main(String[] args) {
System.out.println ("");
System.out.println ("Enter list of integers:");
int[] numbers = ArrayTools.getList ();
System.out.println ("");
System.out.println ("Your list");
ArrayTools.putList (numbers);
ArrayTools.reverse
System.out.println
System.out.println
ArrayTools.putList
System.out.println
(numbers);
("");
("Your list in reverse");
(numbers);
();
}
}
35
ArrayTools demo…

ArrayDemo.java
37
How are we doing with ArrayTools?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
38
A solution to commenting your
code

The commentator:
http://www.cenqua.com/commentator/
39
… main (String args[])
40
Consider that main() method again
 public static void main (String args[])
 How does one pass in a parameter to the main method?
public class MainParameters {
public static void main (String args[]) {
System.out.println ("Number of paramters to “ +
"main(): " + args.length);
if ( args.length > 0 ) {
for ( int i = 0; i < args.length; i++ )
System.out.println ("parameter " +
i + ": '" + args[i] + "'");
}
}
41
}
Program Demo

MainParameters.java


Via JCreator
Via the command line
42
Basic array searching
43
Searching for a value
System.out.println("Enter search value (number): ");
int key = stdin.nextInt();
int i;
for (i
i = 0
0; i < data.length
data.length; ++i
++i) {
if (key == data[i]) {
break;
}
}
0
1
2
data
4
9
5
key
5
i
0
1
2
if (i != data.length) {
System.out.println(key + " is the " + i
+ "-th element");
}
else {
System.out.println(key + " is not in the list");44
}
Searching for the minimum value
 Segment
int minimumSoFar = sample[0];
for (int i = 1; i < sample.length; ++i) {
if (sample[i] < minimumSoFar) {
minimumSoFar = sample[i];
}
}
45
ArrayTools.java method sequentialSearch()
public static int sequentialSearch(int[] data, int key) {
for (int i = 0; i < data.length; ++i) {
if (data[i] == key) {
return i;
}
}
key
11
return -1;
}
data
0
1
2
3
4
5
6
7
8
6
9
82
11
29
85
11
29
91
 Consider
int[] score = { 6, 9, 82, 11, 29, 85, 11, 28, 91 };
int i1 = sequentialSearch(score, 11);
46
int i2 = sequentialSearch(score, 30);
How are we doing with searching?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
47
Follow-up on Knut the polar bear
cub

http://www.comedycentral.com/motherloa
d/?ml_video=84023
48
sequentialSearch() finding an element
public static int sequentialSearch(int[] data, int key) {
for (int
int i = 0
0; i < data.length
data.length; ++i
++i) {
key
11
if (data[i] == key) {
return i;
i
3
2
1
0
}
i1
3
}
return -1;
}
data
6
9
82
11
29
85
0
1
2
3
4
5
 Consider
int[] score = { 6, 9, 82, 11, 29, 85 };
int i1 = sequentialSearch(score, 11);
50
sequentialSearch() not finding an element
public static int sequentialSearch(int[] data, int key) {
for (int
int i = 0
0; i < data.length
data.length; ++i
++i) {
key
11
if (data[i] == key) {
return i;
i
3
2
1
0
6
5
4
}
i1
-1
}
return -1;
}
data
6
9
82
11
29
85
0
1
2
3
4
5
 Consider
int[] score = { 6, 9, 82, 11, 29, 85 };
int i1 = sequentialSearch(score, 30);
51
How are we doing with searching?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
52
Sorting
53
Sorting
 Problem
 Arranging elements so that they are ordered according to
some desired scheme
 Standard is non-decreasing order
 Why don't we say increasing order?
 Major tasks
 Comparisons of elements
 Updates or element movement
54
Selection sorting
 Algorithm basis
 On iteration i, a selection sorting method:
 Finds the element containing the ith smallest value of
its list v and exchanges that element with v[i]
 Example – iteration 0
 Swaps smallest element with v[0]
 This results in smallest element being in the correct place
for a sorted result
v
0
1
2
3
4
5
6
‘Q'
'E'
'W'
‘E'
'Q'
'R'
'T'
'Y'
'U'
7
'I'
8
9
'O'
'P'
55
Selection sorting
 Algorithm basis
 On iteration i, a selection sorting method:
 Finds the element containing the ith smallest value of
its list v and exchanges that element with v[i]
 Example – iteration 1
 Swaps second smallest element with v[1]
 This results in second smallest element being in the
correct place for a sorted result
v
0
1
2
3
4
5
6
7
8
9
'E'
'W'
'I'
'Q'
'R'
'T'
'Y'
'U'
'I'
'W'
'O'
'P'
56
Selection sorting
 Algorithm basis
 On iteration i, a selection sorting method:
 Finds the element containing the ith smallest value of
its list v and exchanges that element with v[i]
 Example – iteration 2
 Swaps third smallest element with v[2]
 This results in third smallest element being in the correct
place for a sorted result
0
v
'E'
1
'I'
2
3
4
5
6
7
8
9
'Q'
‘O'
'R'
'T'
'Y'
'U'
'W'
'O'
‘Q'
'P'
57
Selection sorting
 Algorithm basis
 On iteration i, a selection sorting method:
 Finds the element containing the ith smallest value of
its list v and exchanges that element with v[i]
 Example – iteration 3
 Swaps fourth smallest element with v[3]
 This results in fourth smallest element being in the correct
place for a sorted result
0
v
'E'
1
'I'
2
3
4
5
6
7
8
9
‘O'
'R'
‘P'
'T'
'Y'
'U'
'W'
‘Q'
'P'
‘R'
58
Selection sorting
 Algorithm basis
 On iteration i, a selection sorting method:
 Finds the element containing the ith smallest value of
its list v and exchanges that element with v[i]
 Example – iteration 4
 Swaps fifth smallest element with v[4]
 This results in fifth smallest element being in the correct
place for a sorted result
0
v
'E'
1
'I'
2
3
4
5
6
7
8
9
‘O'
‘P'
'T'
‘Q'
'Y'
'U'
'W'
‘Q'
‘T'
‘R'
59
ArrayTools.java selection sorting
public static void selectionSort(int[] v) {
for (int i = 0; i < v.length-1; ++i) {
// find the location of the ith smallest element
int spot = i;
for (int j = i+1; j < v.length; ++j) {
if (v[j] < v[spot]) { // is current location ok?
// update spot to index of smaller element
spot = j;
}
}
// spot is now correct, so swap elements
int rmbr = v[i];
v[i] = v[spot];
v[spot] = rmbr;
}
}
60
Iteration i
// find the location of the ith smallest element
int spot = i;
for (int j = i+1; j < v.length; ++j) {
if (v[j] < v[spot]) // is spot ok?
// update spot with index of smaller element
spot = j;
}
// spot is now correct, swap elements v[spot] and v[i]
61
How are we doing with sorting?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
62
New 2008 demotivators
63
Binary search
64
Binary search
 Given a list, find a specific element in the list
 List MUST be sorted!
 Each time it iterates through, it cuts the search
space in half
 A binary search is MUCH faster than a sequential
search
65
Binary search use
The ‘BS’ in BSDemo is for Binary Search, mind you

public class BSDemo {
public static void main(String[] args) {
int[] numbers = { 9, 3, 1, 8, 4, 6, 10, 2 };
System.out.println ("The original list of numbers:");
ArrayTools.putList(numbers);
System.out.println();
ArrayTools.selectionSort(numbers);
System.out.println ("The sorted list of numbers:");
ArrayTools.putList(numbers);
System.out.println();
System.out.println
System.out.println
System.out.println
System.out.println
System.out.println
System.out.println
System.out.println
("Searching
("Searching
("Searching
("Searching
("Searching
("Searching
("Searching
for
for
for
for
for
for
for
0: " + ArrayTools.binarySearch(numbers, 0));
1: " + ArrayTools.binarySearch(numbers, 1));
4: " + ArrayTools.binarySearch(numbers, 4));
5: " + ArrayTools.binarySearch(numbers, 5));
6: " + ArrayTools.binarySearch(numbers, 6));
10: " + ArrayTools.binarySearch(numbers, 10));
11: " + ArrayTools.binarySearch(numbers, 11));
}
}
66
Binary search use demo…

BSDemo.java
67
Binary search
public static int binarySearch (int[] data, int key) {
int i = 0;
// left endpoint of search interval
int j = data.length-1; // right endpoint of search interval
while ( i < j ) {
int m = (i+j)/2;
if ( key > data[m] ) {
i = m+1;
} else {
j = m;
}
}
if ( key == data[i] ) {
return i;
} else {
return -1;
}
68
}
Binary search, take 1
public static int binarySearch (int[] data, int key) {
int i = 0;
int j = data.length-1;
data
i
while ( i < j ) {
int m = (i+j)/2;
if ( key > data[m] ) {
i = m+1;
} else {
j = m;
}
}
if ( key == data[i] ) {
return i;
} else {
return -1;
}
key
returns:
a0
a1
a2
a3
a4
a5
a6
a7
a8
a9
2
4
6
8
10
12
14
16
18
20
0
5
6
m
4
7
6
5
j
9
7
6
14
6
69
Binary search
 But what if the element is not in the list?
70
Binary search, take 2
public static int binarySearch (int[] data, int key) {
int i = 0;
int j = data.length-1;
data
i
while ( i < j ) {
int m = (i+j)/2;
if ( key > data[m] ) {
i = m+1;
} else {
j = m;
}
}
if ( key == data[i] ) {
return i;
} else {
return -1;
}
key
returns:
a0
a1
a2
a3
a4
a5
a6
a7
a8
a9
2
4
6
8
10
12
14
16
18
20
0
5
7
m
4
7
6
j
9
7
15
-1
71
How are we doing with binary
search?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
72
Binary search
 A somewhat alternative view of what a binary search does…
73
How long does a binary search take?
 Given a array of 64 elements
 1st iteration cuts the array to 32
 2nd iteration cuts the array to 16
 3rd to 8
 4th to 4
 5th to 2
 6th to 1
 Given a array of 1024 elements
 1st iteration cuts the array to 512
 ...
 10th iteration cuts the list to 1 element
 Thus, the binary search takes log2 n iterations!
 Where n is the size of the array
74
Binary search vs. sequential search
 Assume the array has n elements
 Sequential search takes n iterations to find the element
 Binary search takes log2 n iterations to find the element
 Consider a list of 1 million elements
 Binary search takes about 20 iterations
 Sequential search takes 1,000,000 iterations
 Consider a list of 1 trillion elements
 Binary search takes about 40 iterations
 Sequential search takes 1,000,000,000,000 iterations
75
How are we doing with binary
search?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
76
Vector class
78
Limitations of arrays
 You can’t change their size once created
 This can be a big problem!
 So



we will create a new class that will operate like an array:
We can store and get elements by index number
It will automatically increase in size as needed
And other fancy features…
 Let’s call the class Vector
 As we are basically writing the java.util.Vector class
79
Properties of our Vector class
 It needs to have an array to hold the values
 As our internal array will often be bigger than the number of
elements in the Vector, we need a size as well
 More on what this means in a slide or two…
 Not much else…
80
Methods in our Vector class




Insert and remove elements into the Vector
Get an element from the Vector
Find the length
Print it out to the screen
 What happens when the array field is full, and we want to add
an element?
 We will need to increase the size of the array
 So we need a method to do that as well
81
Our first take on our Vector class
public class Vector {
private Object array[];
private int size = 0;
Vector() {
array = new Object[100];
}
Vector(int length) {
array = new Object[length];
}
}

What does this mean?
 We’ll see that a bit later…
 But briefly, it means the array can store any object
82
Adding an element to our Vector
public void add (Object o) {
array[size++] = o;
}
 Pretty easy!
 But what if the array is full?
 We need a way to increase the capacity of the array
83
Increasing the Vector’s array’s capacity
private void increaseCapacity() {
int oldSize = array.length;
Object newArray[] = new Object[2*oldSize];
for ( int i = 0; i < oldSize; i++ )
newArray[i] = array[i];
array = newArray;
}

And our new add() method:
public void add (Object o) {
if ( size == array.length )
increaseCapacity();
array[size++] = o;
}
84
Methods can be private as well
 Notice that the increaseCapacity() method is called only by
the add() method when necessary
 It’s not ever going to be called by whomever is using our
Vector
 Thus, we will make it private
 That means that only other Vector methods can call it
85
Removing an element from a Vector
public Object remove (int which) {
Object ret = array[which];
for ( int i = which; i < array.length-1; i++ )
array[i] = array[i+1];
array[array.length-1] = null;
size--;
return ret;
}
86
Safety Awards

safety_Awards_2006.pps
87
Miscellaneous other methods
public int size() {
return size;
}
public Object get (int which) {
return array[which];
}
88
Our toString() method
public String toString() {
String ret = "[";
for ( int i = 0; i < size; i++ ) {
ret += array[i];
if ( i != size-1 )
ret += ", ";
}
ret += "]";
return ret;
}
89
Using our Vector

This code is in a separate class called VectorUsage
public static void main (String[] args) {
Vector v = new Vector();
for ( int i = 12; i < 30; i++ ) {
v.add (String.valueOf(i));
}
System.out.println (v);
System.out.println (v.size());
String s = (String) v.get(5);
System.out.println (s);
v.remove (5);
System.out.println (v);
v.remove (5);
System.out.println (v);
}
90
Program Demo

VectorUsage.java
91
The “real” Vector class
 Java provides a Vector class
 In java.util
 It contains all of the methods shown
92
Program Demo

VectorUsage.java

But using java.util.Vector
93
What about those errors?
 When compiled with java.util.Vector, we see:
 Note: C:\...\VectorUsage.java uses unchecked or
unsafe operations.
 Note:
Recompile
with
-Xlint:unchecked
for
details.
 You can ignore these
 They deal with generics (aka templates), which you will
see in future courses
 The program was still compiled
94
More on using the Vector class
 To add a String object s to the end of a Vector v
 v.add(s);
 To get the String object at the end of the Vector v
 String s = (String) v.get(v.size()-1);
 To remove a String object from the end of a Vector v
 String s = (String) v.remove(v.size()-1);
 This both removes the object from the Vector and stores
the removed value into s
95
How are we doing with Vectors?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
96
Stuff you don’t see everyday…

StuffYouDontSeeEveryDay.pps
97
Multi-dimensional arrays
99
Multidimensional arrays
 Many problems require information be organized as a twodimensional or multidimensional list
 Examples
 Matrices
 Graphical animation
 Economic forecast models
 Map representation
 Time studies of population change
 Microprocessor design
100
Example
 Segment
int[][] m = new int[3][];
m[0] = new int[4];
m[1] = new int[4];
m[2] = new int[4];
 Produces
m[0]
m
m[1]
m[2]
m[2][0]
m
0
m[0][0]
0
m[0][1]
When an array is
created, each
value is initialized!
0
m[0][2]
0
m[0][3]
m[2][1]
m[2][2]
m[2][3]
0
0
0
0
0
0
0
0
m[1][0]
m[1][1]
m[1][2]
m[1][3]
101
Example
 Alternative
int[][] m = new int[3][4];
 Produces
m[0]
m[1]
m[2]
m[2][0]
m
0
m[0][0]
0
m[0][1]
0
m[0][2]
0
m[0][3]
m[2][1]
m[2][2]
m[2][3]
0
0
0
0
0
0
0
0
m[1][0]
m[1][1]
m[1][2]
m[1][3]
102
Multidimensional array visualization
 A multi-dimensional array declaration (either one):
int[][] m = new int[3][4];
 How we visualize it:
0
0
0
0
0
0
0
0
0
0
0
0
or
0
0
0
0
0
0
0
0
0
0
0
0
103
Example
 Segment
for (int c = 0; c < m.length; ++c) {
for (int r = 0; r < m[c].length; ++r) {
System.out.print("Enter a value: ");
m[c][r] = stdin.nextInt();
}
}
0
0
0
0
0
0
0
0
0
0
0
0
104
Rows by columns or columns by rows?
 Consider int[][] m = new int[3][4];
 Is that 3 rows by 4 columns or 3 columns by 4 rows?
0
0
0
0
0
0
0
0
0
0
0
0
or
0
0
0
0
0
0
0
0
0
0
0
0
 The answer is that it can be either
 As long as you are consistent with your column/row
105
placement
Rows by columns or columns by rows?
 This makes it 3 columns by 4 rows:
for (int c = 0; c < m.length; ++c)
for (int r = 0; r < m[c].length; ++r) {
System.out.print("Enter a value: ");
m[c][r] = stdin.nextInt();
}
 This makes it 3 rows by 4 columns:
for (int r = 0; r < m.length; ++r)
for (int c = 0; c < m[r].length; ++c) {
System.out.print("Enter a value: ");
m[r][c] = stdin.nextInt();
}
106
Example
 Segment
String[][]
s[0] = new
s[1] = new
s[2] = new
s[3] = new
 Produces
s[0]
s = new String[4][];
String[2];
String[2];
String[4];
String[3];
s[1]
s[2]
s[3]
null
null null
s[3][0] s[3][1] s[3][2]
s
null
null null
null
s[2][0] s[2][1] s[2][2] s[2][3]
null null
s[0][0] s[0][1]
null
null
107
s[1][0] s[1][1]
Multidimensional array visualization
 Segment
String[][]
s[0] = new
s[1] = new
s[2] = new
s[3] = new
 Produces
s = new String[4][];
String[2];
String[2];
String[4];
String[3];
0
0
0
0
0
0
0
0
0
0
or
0
0
0
0
0
0
0
0
0
0
0
 Called a “ragged”
array
0
108
Fractals
109
Fractal zooming

http://www.fractalartcontests.com/2000/e
n/entry-004-7.htm
110
Explicit Initialization
 Segment
int c[][] = {{1, 2}, {3, 4}, {5, 6}, {7, 8, 9}};
 Produces
c[0]
c[1]
c[2]
7
c[3]
8
9
c[3][0] c[3][1] c[3][2]
c
5
6
c[2][0] c[2][1]
1
2
c[0][0] c[0][1]
3
4
c[1][0] c[1][1]
111
Matrices
 A two-dimensional array is sometimes known as a matrix
because it resembles that mathematical concept
 A matrix a with m rows and n columns is represented
mathematically in the following manner
a1  1 a 1 2  a 1 n
a2  1 a 2 2  a 2 n


am  1 a m 2  a m n
112
Matrix addition
 Definition C = A + B
 cij = aij + bij
 cij is sum of the elements in the same row and column of
A and B
113
Matrix addition
public static double[][] add(double[][] a, double[][] b) {
// determine number of rows in solution
int m = a.length;
// determine number of columns in solution
int n = a[0].length;
// create the array to hold the sum
double[][] c = new double[m][n];
// compute the matrix sum row by row
for (int i = 0; i < m; ++i) {
// produce the current row
for (int j = 0; j < n; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}
114
Homework 10
 You will be creating a Map class
 The Map class contains a 2-D array
 In each spot will be a Location object
 (from a previous HW)
 Lab 11 is (was?) going to be a MapPrinter class
 Will print out the 2-D Map via text
115
How are we doing with 2-D arrays?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
116
Driving in Bolivia

DrivingInBolivia.pps
117
Wrapper classes
118
But what about adding variables?
 The add method takes an Object as a parameter
 public void add (Object o) {
 Although we haven’t seen it yet, this means you can add
any object you want to the vector
 Primitive types (i.e. variables) are not objects
 How can they be added?
 The solution: wrapper classes!
119
The Integer wrapper class
 This is how you add an int variable to a Vector:
int x = 5;
Integer i = new Integer(x);
vector.add (i);
//…
Integer j = (Integer) v.get(0);
int y = j.intValue();
 Pretty annoying syntax – we’ll see how to get around it in a
bit…
120
More on wrapper classes
 All the primitive types have wrapper classes
 Usually, the names are just the capitalized version of the
type
 I.e. Double for double, Byte for byte, etc.
 Two exceptions: int and char
 int has Integer
 char has Character
121
More on wrapper classes
 Consider this code:
int x = 5;
vector.add (x);
//…
int y = vector.get(0);
 Does this code work?
 It shouldn’t
 As we are adding a variable (not an object) to a vector
 But it does work!
 Why?
122
Auto-boxing
 Java 1.5 will automatically “wrap” a primitive value into it’s
wrapper class when needed
 And automatically “unwrap” a wrapper object into the
primitive value
 So Java translates the previous code into the following:
int x = 5;
vector.add (new Integer(x));
//…
int y = ((Integer)vector.get(0)).intValue();
 This is called autoboxing
 And auto-unboxing (unauto-boxing?)
 This does not work in Java 1.4 or before
123
More on auto-boxing
 Consider the following code:
Double d = 7.5;
Double e = 6.5;
Double f = d + e;
System.println (f);
 This is doing a lot of auto-boxing (and auto-unboxing):
Double d = new Double(7.5);
Double e = new Double(6.5);
Double f = newDouble(d.doubleValue() +
e.doubleValue());
System.println (f);
124
How are we doing with
Wrapper classes?
oo
...
so
oo
c.
..
da
I’m
at
a
ot
N
N
ot
w
el
l.
ll.
I’m
no
It’
s
y.
ki
n
tg
re
at
a
ith
w
ka
O
,b
u.
..
lit
t..
...
st
uf
fi
w
el
l–
Th
is
irl
y
5.
Fa
4.
w
el
l!
3.
20% 20% 20% 20% 20%
ry
2.
Very well! This stuff is
easy!
Fairly well – with a little
review, I’ll be good
Okay. It’s not great, but
it’s not horrible, either
Not well. I’m kinda
confused
Not at all. I’m
soooooo lost.
Ve
1.
125
Star Wars Episode 3 Trailer
126
Star Wars Episode 3 Trailer

That was a edited version
– I changed the PG-rated trailer to a G-rated
trailer

The original one can be found at
http://www.sequentialpictures.com/
– Or Google for “star wars parody”
127
Download