Arrays
-
Upload
yasir-molina -
Category
Documents
-
view
26 -
download
0
description
Transcript of Arrays
1
Arrays
Chapter 8Fall 2006CS 101Aaron Bloomfield
22
Introduction to arraysIntroduction to arrays
3
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
4
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
value 0 0 0 0 0
-c
…
5
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 00 0 00 0 00 00
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
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 01 0 00 0 00 00
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
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 01 0 00 0 50 00
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
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 81 0 00 0 50 00
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
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 81 0 06 0 50 00
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
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 81 0 06 0 50 012
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
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 81 0 06 0 50 012
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
8 is displayed
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 81 0 06 3 50 012
v[2]v[0] v[1] v[5]v[3] v[4] v[7]v[6] v[9]v[8]
Suppose 3 is extracted
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();
6
Array variable definition styles Without initialization
Type ofvalues in
list
Name oflist
Bracketsindicate arrayvariable being
defined
ElementType [ ] id;
int [] a;int a[];
7
Array variable definition styles With initialization
ElementType[ ] id = new ElementType [n];
Nonnegative integer expression specifying thenumber of elements in the array
A new array of nelements
8
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)
9
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
11
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…
1212
New 2005 demotivatiors!New 2005 demotivatiors!
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];p[2] = vertex;
p
p[0] p[1] p[2]
null null null
Point: (0, 0)
p
p[0] p[1]
Point: (1, 1) Point: (2, 2)
p[2]
Point: (1, 0)
p
p[0] p[1]
Point: (1, 1) Point: (2, 2)
p[2]
Point: (1, 0)
p
p[0] p[1]
Point: (1, 2) Point: (2, 2)
p[2]
Point: (1, 0)
p
p[0] p[1]
Point: (1, 2) Point: (2, 2)
p[2]
vertex
Point: (4, 4)
Point: (1, 0)
p
p[0] p[1]
Point: (2, 2)
p[2]
vertex
Point: (4, 4)
Point: (1, 0)
p
p[0] p[1] p[2]
vertex
Point: (4, 4)
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];p[2] = vertex;
15
Explicit initialization Syntax
ElementType[] id = { exp0 , exp1 , ... expn-1 };
id references an array of n elements. id[0] hasvalue exp0, id[1] has value exp1, and so on.
Each expi is an expression thatevaluates to type ElementType
16
Explicit initialization Example
String[] puppy = { “pika”, “mila”, “arlo”, “nikki” };
int[] unit = { 1 };
Equivalent toString[] 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 arrayfor (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
Array members Member clone()
Produces a shallow copyPoint[] u = { new Point(0, 0), new Point(1, 1)};Point[] v = u.clone();
v[1] = new Point(4, 30);
Point: (0, 0) Point: (1, 1)
u
u[0] u[1]
Point: (0, 0)
v
v[0] v[1]
Point: (1, 1)
u
u[0] u[1]
Point: (0, 0)
v
v[0] v[1]
Point: (1, 1)
u
u[0] u[1]
Point: (4, 30)
Point[] u = { new Point(0, 0), new Point(1, 1)};Point[] v = u.clone();
v[1] = new Point(4, 30);
19
Member clone() Produces a shallow copy
Point[] u = { new Point(0, 0), new Point(1, 1)};Point[] v = u.clone();
v[1].setX(10);
Point[] u = { new Point(0, 0), new Point(1, 1)};Point[] v = u.clone();
v[1].setX(10);
Array members
Point: (0, 0) Point: (1, 1)
u
u[0] u[1]
Point: (0, 0)
v
v[0] v[1]
Point: (1, 1)
u
u[0] u[1]
Point: (0, 0)
v
v[0] v[1]
Point: (10, 1)
u
u[0] u[1]
20
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
ExamplePoint[] w = new Point[u.length];for (int i = 0; i < u.length; ++i) {
w[i] = (Point) u[i].clone();}
21
Making a deep copy
Point: (0, 0)
w
w[0] w[1]
Point: (2, 1) Point: (2, 2)
w[2]
u
u[0] u[1] u[2]
Point: (0, 0) Point: (2, 1) Point: (2, 2)
22
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]);
23
How Java represents arrays Consider
int[] a = { 1, 2, 3, 4, 5 };
a 1 2 3 4 5
+ …
Array
- length = 5
- data = 1 2 3 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;
1 2 3 4 5
0 0 0 0 0
a -
b null
c
d
int[] a;int[] b = null;int[] c = new int[5];int[] d = { 1, 2, 3,
4, 5 };a = c;d = c;
25
How are we How are we doing with arrays?doing with arrays?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s an array again?I’m so lost. What’s an array again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
2727
ArrayToolsArrayTools
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]);}
}
Considerint[] 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];}
}
Considerint[] foo = { 1, 2, 3, 4, 5 };reverse (foo);putList (foo);
33
ArrayDemo.javapublic 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 (numbers);System.out.println ("");System.out.println ("Your list in reverse");ArrayTools.putList (numbers);System.out.println ();
}}
3535
ArrayTools demo…ArrayTools demo…
ArrayDemo.javaArrayDemo.java
36
How are we How are we doing with ArrayTools?doing with ArrayTools?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s an array again?I’m so lost. What’s an array again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
3737
Today’s demotivatorsToday’s demotivators
3838
… … main (String args[])main (String args[])
39
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] +
"'");}
}}
4040
Program DemoProgram Demo
MainParameters.javaMainParameters.java Via JCreatorVia JCreator Via the command lineVia the command line
4141
Basic array searchingBasic array searching
42
System.out.println("Enter search value (number): ");int key = stdin.nextInt();
int i;for (i = 0; i < data.length; ++i) {
if (key == data[i]) {break;
}}
if (i != data.length) {System.out.println(key + " is the " + i
+ "-th element");}else {
System.out.println(key + " is not in the list");}
++i
System.out.println("Enter search value (number): ");int key = stdin.nextInt();
int i;
if (key == data[i]) {break;
if (i != data.length) {System.out.println(key + " is the " + i
+ "-th element");}
i < data.length i = 0
Searching for a value
data 54 9
20 1
key 5
i -
data 54 9
20 1
key 5
i 0
data 54 9
20 1
key 5
i 0
data 54 9
20 1
key 5
i 0
data 54 9
20 1
key 5
i 1
data 54 9
20 1
key 5
i 1
data 54 9
20 1
key 5
i 1
data 54 9
20 1
key 5
i 2
data 54 9
20 1
key 5
i 2
data 54 9
20 1
key 5
i 2
data 54 9
20 1
key 5
i 2
data 54 9
20 1
key 5
i 2
43
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];
}}
44
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;
}}
return -1;}
Considerint[] score = { 6, 9, 82, 11, 29, 85, 11, 28, 91 };int i1 = sequentialSearch(score, 11);int i2 = sequentialSearch(score, 30);
data 826 9 8511 29 2911 91
20 1 53 4 76 8
key 11
45
How are we How are we doing with searching?doing with searching?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s a search again?I’m so lost. What’s a search again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
4646
A solution to commenting your A solution to commenting your codecode
The commentator: The commentator: http://www.cenqua.com/commentatohttp://www.cenqua.com/commentator/r/
4747
SortingSorting
48
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
49
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 ‘E'‘Q' 'W' 'Y''R' 'T' 'I''U' 'P''O'
20 1 53 4 76 98
v ‘E'‘Q' 'W' 'Y''R' 'T' 'I''U' 'P''O'
20 1 53 4 76 98
v 'Q''E' 'W' 'Y''R' 'T' 'I''U' 'P''O'
20 1 53 4 76 98
50
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 'Q''E' 'W' 'Y''R' 'T' 'I''U' 'P''O'
20 1 53 4 76 98
v 'Q''E' 'I' 'Y''R' 'T' 'W''U' 'P''O'
20 1 53 4 76 98
51
v 'Q''E' 'I' 'Y''R' 'T' 'W''U' 'P''O'
20 1 53 4 76 98
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
v ‘O''E' 'I' 'Y''R' 'T' 'W''U' 'P'‘Q'
20 1 53 4 76 98
52
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
v ‘O''E' 'I' 'Y''R' 'T' 'W''U' 'P'‘Q'
20 1 53 4 76 98
v ‘O''E' 'I' 'Y'‘P' 'T' 'W''U' ‘R'‘Q'
20 1 53 4 76 98
53
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
v ‘O''E' 'I' 'Y'‘P' 'T' 'W''U' ‘R'‘Q'
20 1 53 4 76 98
v ‘O''E' 'I' 'Y'‘P' ‘Q' 'W''U' ‘R'‘T'
20 1 53 4 76 98
54
ArrayTools.java selection sortingpublic static void selectionSort(int[] v) {
for (int i = 0; i < v.length-1; ++i) {
// find the location of the ith smallest elementint 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 elementsint rmbr = v[i];v[i] = v[spot];v[spot] = rmbr;
}}
55
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 elementspot = j;
}
// spot is now correct, swap elements v[spot] and v[i]
56
How are we How are we doing with sorting?doing with sorting?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s a sort again?I’m so lost. What’s a sort again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
5757
Very unofficial demotivatorsVery unofficial demotivators
5858
Binary searchBinary search
59
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
60
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 ("Searching for 0: " + ArrayTools.binarySearch(numbers, 0));System.out.println ("Searching for 1: " + ArrayTools.binarySearch(numbers, 1));System.out.println ("Searching for 4: " + ArrayTools.binarySearch(numbers, 4));System.out.println ("Searching for 5: " + ArrayTools.binarySearch(numbers, 5));System.out.println ("Searching for 6: " + ArrayTools.binarySearch(numbers, 6));System.out.println ("Searching for 10: " + ArrayTools.binarySearch(numbers, 10));System.out.println ("Searching for 11: " + ArrayTools.binarySearch(numbers, 11));
}}
6161
Binary search use demo…Binary search use demo…
BSDemo.javaBSDemo.java
62
Binary searchpublic 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;}
}
63
if ( key == data[i] ) {return i;
} else {return -1;
}
if ( key == data[i] ) {return i;
} else {return -1;
}
int i = 0;int j = data.length-1;int i = 0;int j = data.length-1;
while ( i < j ) {int m = (i+j)/2;if ( key > data[m] ) { i = m+1;} else { j = m;}
}
while ( i < j ) {int m = (i+j)/2;if ( key > data[m] ) { i = m+1;} else { j = m;}
}
Binary search, take 1
2 4 6 8 10 12 14 16 18 20
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
i jm
public static int binarySearch (int[] data, int key) {
0
key 14
945 7 76 656
returns: 6
data
64
Binary search But what if the element is not in the list?
65
if ( key == data[i] ) {return i;
} else {return -1;
}
if ( key == data[i] ) {return i;
} else {return -1;
}
int i = 0;int j = data.length-1;int i = 0;int j = data.length-1;
while ( i < j ) {int m = (i+j)/2;if ( key > data[m] ) { i = m+1;} else { j = m;}
}
while ( i < j ) {int m = (i+j)/2;if ( key > data[m] ) { i = m+1;} else { j = m;}
}
Binary search, take 2
2 4 6 8 10 12 14 16 18 20
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
i jm
public static int binarySearch (int[] data, int key) {
0
key 15
945 7 76
returns: -1
data
7
66
How are we How are we doing with binary search?doing with binary search?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s a search again?I’m so lost. What’s a search again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
67
Binary search A somewhat alternative view of what a binary search does…
68
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
69
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
70
How are we How are we doing with binary search?doing with binary search?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s a search again?I’m so lost. What’s a search again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
7272
Multi-dimensional arraysMulti-dimensional arrays
73
Multidimensional arrays Many problems require information be organized as a two-
dimensional or multidimensional list
Examples Matrices Graphical animation Economic forecast models Map representation Time studies of population change Microprocessor design
74
Example Segment
int[][] m = new int[3][];m[0] = new int[4];m[1] = new int[4];m[2] = new int[4];
Produces
When an array is created, each
value is initialized!
m
m[0] m[1] m[2]
0 0 0 0 0 0 0 0
00 0 0
m[2][0] m[2][1] m[2][2] m[2][3]
m[0][0] m[0][1] m[0][2] m[0][3] m[1][0] m[1][1] m[1][2] m[1][3]
m
75
Example Alternative
int[][] m = new int[3][4];
Produces
m
m[0] m[1] m[2]
0 0 0 0 0 0 0 0
00 0 0
m[2][0] m[2][1] m[2][2] m[2][3]
m[0][0] m[0][1] m[0][2] m[0][3] m[1][0] m[1][1] m[1][2] m[1][3]
76
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
0
0
0
0
0
0
0
0
0
0
0
0
or
77
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
78
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?
The answer is that it can be either As long as you are consistent with your column/row
placement
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
79
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();
}
8080
Today’s demotivatorsToday’s demotivators
81
Example Segment
String[][] s = new String[4][];s[0] = new String[2];s[1] = new String[2];s[2] = new String[4];s[3] = new String[3];
Produces
s
s[0] s[1] s[2]
null null
null null
null null null
s[3][0] s[3][1] s[3][2]
s[1][0] s[1][1]
s[0][0] s[0][1]
null null null null
s[2][0] s[2][1] s[2][2] s[2][3]
s[3]
82
Multidimensional array visualization Segment
String[][] s = new String[4][];s[0] = new String[2];s[1] = new String[2];s[2] = new String[4];s[3] = new String[3];
Produces
Called a “ragged” array
0 0 0
0 0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
or
0
0
0
83
Explicit Initialization Segment
int c[][] = {{1, 2}, {3, 4}, {5, 6}, {7, 8, 9}};
Produces
c
c[0] c[1] c[2]
1 2
3 4
7 8 9
c[3][0] c[3][1] c[3][2]
c[1][0] c[1][1]
c[0][0] c[0][1]
5 6
c[2][0] c[2][1]
c[3]
84
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
85
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
86
Matrix additionpublic static double[][] add(double[][] a, double[][] b) {
// determine number of rows in solutionint m = a.length;
// determine number of columns in solutionint n = a[0].length;
// create the array to hold the sumdouble[][] c = new double[m][n];
// compute the matrix sum row by rowfor (int i = 0; i < m; ++i) {
// produce the current rowfor (int j = 0; j < n; ++j) {
c[i][j] = a[i][j] + b[i][j];}
}
return c;}
87
Homework J9 You will be creating a Board class
The Board class contains a 2-D array In each spot will be a Ship object
(from a previous HW) Lab 11 is going to be a MapPrinter class
Will print out the 2-D Board via text
88
How are we How are we doing with 2-D arrays?doing with 2-D arrays?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s an array again?I’m so lost. What’s an array again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
8989
DeCSS: The programDeCSS: The program
#include<stdlib.h> typedef unsigned int uint; char #include<stdlib.h> typedef unsigned int uint; char ctb[512]="33733b2663236b763e7e362b6e2e667bd393db0643034b96de9ed60b4e0e4\ ctb[512]="33733b2663236b763e7e362b6e2e667bd393db0643034b96de9ed60b4e0e4\ 69b57175f82c787cf125a1a528fca8ac21fd999d10049094190d898d001480840913d7d35269b57175f82c787cf125a1a528fca8ac21fd999d10049094190d898d001480840913d7d35246\ 46\ d2d65743c7c34256c2c6475dd9dd5044d0d4594dc9cd4054c0c449559195180c989c11058d2d65743c7c34256c2c6475dd9dd5044d0d4594dc9cd4054c0c449559195180c989c11058185\ 185\ 081c888c011d797df0247074f92da9ad20f4a0a429f53135b86c383cb165e1e568bce8ec61b081c888c011d797df0247074f92da9ad20f4a0a429f53135b86c383cb165e1e568bce8ec61bb\ b\ 3f3bba6e3a3ebf6befeb6abeeaee6fb37773f2267276f723a7a322f6a2a627fb9f9b1a0e9a9e\ 3f3bba6e3a3ebf6befeb6abeeaee6fb37773f2267276f723a7a322f6a2a627fb9f9b1a0e9a9e\ 1f0b8f8b0a1e8a8e0f15d1d5584cd8dc5145c1c5485cc8cc415bdfdb5a4edade5f4bcfcb4a5e\ 1f0b8f8b0a1e8a8e0f15d1d5584cd8dc5145c1c5485cc8cc415bdfdb5a4edade5f4bcfcb4a5e\ cace4f539793120692961703878302168286071b7f7bfa2e7a7eff2bafab2afeaaae2ff"; cace4f539793120692961703878302168286071b7f7bfa2e7a7eff2bafab2afeaaae2ff"; typedef unsigned char uchar;uint tb0[11]={5,0,1,2,3,4,0,1,2,3,4};uchar* F=NULL; uint typedef unsigned char uchar;uint tb0[11]={5,0,1,2,3,4,0,1,2,3,4};uchar* F=NULL; uint lf0,lf1,out;void ReadKey(uchar* key){int i;char hst[3]; hst[2]=0;if(F==\ NULL)lf0,lf1,out;void ReadKey(uchar* key){int i;char hst[3]; hst[2]=0;if(F==\ NULL){F=malloc(256);for(i=0;i<256;i++){hst[0]=ctb[2*i];hst[1]=ctb[2*i+1];F[i]=\ {F=malloc(256);for(i=0;i<256;i++){hst[0]=ctb[2*i];hst[1]=ctb[2*i+1];F[i]=\ strtol(hst,NULL,16);}}out=0;lf0=(key[1]<<9)|key[0]|0x100;lf1=(key[4]<<16)|(key\ strtol(hst,NULL,16);}}out=0;lf0=(key[1]<<9)|key[0]|0x100;lf1=(key[4]<<16)|(key\ [3]<<8)|key[2];lf1=((lf1&0xfffff8)<<1)|(lf1&0x7)|0x8;}uchar Cipher(int sw1,\ int sw2){int [3]<<8)|key[2];lf1=((lf1&0xfffff8)<<1)|(lf1&0x7)|0x8;}uchar Cipher(int sw1,\ int sw2){int i,a,b,x=0,y=0;for(i=0;i<8;i++){a=((lf0>>2)^(lf0>>16))&1;b=((lf1\ i,a,b,x=0,y=0;for(i=0;i<8;i++){a=((lf0>>2)^(lf0>>16))&1;b=((lf1\ >>12)^(lf1>>20)^(lf1>>21)^(lf1>>24))&1;lf0=(lf0<<1)|a;lf1=(lf1<<1)|b;x=(x>>1)\ |>>12)^(lf1>>20)^(lf1>>21)^(lf1>>24))&1;lf0=(lf0<<1)|a;lf1=(lf1<<1)|b;x=(x>>1)\ |(a<<7);y=(y>>1)|(b<<7);}x^=sw1;y^=sw2;return out=(out>>8)+x+y;} void \ (a<<7);y=(y>>1)|(b<<7);}x^=sw1;y^=sw2;return out=(out>>8)+x+y;} void \ CSSdescramble(uchar *sec,uchar *key){uint i;uchar *end=sec+0x800;uchar KEY[5]; CSSdescramble(uchar *sec,uchar *key){uint i;uchar *end=sec+0x800;uchar KEY[5]; for(i=0;i<5;i++)KEY[i]=key[i]^sec[0x54+i];ReadKey(KEY);sec+=0x80;while(sec!=\ for(i=0;i<5;i++)KEY[i]=key[i]^sec[0x54+i];ReadKey(KEY);sec+=0x80;while(sec!=\ end)*sec++=F[*sec]^Cipher(255,0);}void CSStitlekey1(uchar *key,uchar *im) {uchar end)*sec++=F[*sec]^Cipher(255,0);}void CSStitlekey1(uchar *key,uchar *im) {uchar k[5];int i; ReadKey(im);for(i=0;i<5;i++)k[i]=Cipher(0,0);for(i=9;i>=0;\ k[5];int i; ReadKey(im);for(i=0;i<5;i++)k[i]=Cipher(0,0);for(i=9;i>=0;\ i--)key[tb0[i+1]]=k[tb0[i+1]]^F[key[tb0[i+1]]]^key[tb0[i]];}void CSStitlekey2\ (uchar i--)key[tb0[i+1]]=k[tb0[i+1]]^F[key[tb0[i+1]]]^key[tb0[i]];}void CSStitlekey2\ (uchar *key,uchar *im){uchar k[5];int i;ReadKey(im);for(i=0;i<5;i++)k[i]=\ *key,uchar *im){uchar k[5];int i;ReadKey(im);for(i=0;i<5;i++)k[i]=\ Cipher(0,255);for(i=9;i>=0;i--)key[tb0[i+1]]=k[tb0[i+1]]^F[key[tb0[i+1]]]^key\ Cipher(0,255);for(i=9;i>=0;i--)key[tb0[i+1]]=k[tb0[i+1]]^F[key[tb0[i+1]]]^key\ [tb0[i]];}void CSSdecrypttitlekey(uchar *tkey,uchar *dkey){int i;uchar im1[6]; uchar [tb0[i]];}void CSSdecrypttitlekey(uchar *tkey,uchar *dkey){int i;uchar im1[6]; uchar im2[6]={0x51,0x67,0x67,0xc5,0xe0,0x00};for(i=0;i<6;i++)im1[i]=dkey[i]; im2[6]={0x51,0x67,0x67,0xc5,0xe0,0x00};for(i=0;i<6;i++)im1[i]=dkey[i]; CSStitlekey1(im1,im2);CSStitlekey2(tkey,im1);} CSStitlekey1(im1,im2);CSStitlekey2(tkey,im1);}
9090
DeCSS: The shirt (and tie!)DeCSS: The shirt (and tie!)
9191
DeCSS: The poemDeCSS: The poemHow to decrypt aHow to decrypt aDVD: in haiku form.DVD: in haiku form.(Thanks, Prof. D. S. T.)(Thanks, Prof. D. S. T.)------------------------------------------------
(I abandon my(I abandon myexclusive rights to make orexclusive rights to make orperform copies ofperform copies of
this work, U. S. Codethis work, U. S. CodeTitle Seventeen, sectionTitle Seventeen, sectionOne Hundred and Six.)One Hundred and Six.)
Muse! When we learned toMuse! When we learned tocount, little did we know allcount, little did we know allthe things we could dothe things we could do
some day by shufflingsome day by shufflingthose numbers: Pythagorasthose numbers: Pythagorassaid "All is number"said "All is number"
long before he sawlong before he sawcomputers and their effects,computers and their effects,or what they could door what they could do
Table Zero is:Table Zero is:
Five, zero, one, two, three, four,Five, zero, one, two, three, four,
oh, one, two, three, four.oh, one, two, three, four.
Table One is long:Table One is long:
two to the eighth power bytes.two to the eighth power bytes.
Ready? Here they are:Ready? Here they are:
Fifty one; then oneFifty one; then one
hundred fifteen; fifty nine;hundred fifteen; fifty nine;
thirty eight; ninetythirty eight; ninety
nine; thirty five; onenine; thirty five; one
hundred seven; one hundredhundred seven; one hundred
eighteen; sixty two;eighteen; sixty two;
one hundred twentyone hundred twenty
six; fifty four; forty three;six; fifty four; forty three;
one hundred ten; thenone hundred ten; then
9292
DeCSS: The numberDeCSS: The number The world’s first illegal prime number:The world’s first illegal prime number:
48565078965739782930984189469428613770744208735135792401965207366869854856507896573978293098418946942861377074420873513579240196520736686985134010472374469687974399261175109737777010274475280490588313840375497013401047237446968797439926117510973777701027447528049058831384037549709987909653955227011712157025974666993240226834596619606034851742497735998790965395522701171215702597466699324022683459661960603485174249773584685188556745702571254749996482194184655710084119086259716947970799158468518855674570257125474999648219418465571008411908625971694797079915200486670997592359606132072597379799361886063169144735883002453369727820048667099759235960613207259737979936188606316914473588300245336972781813914797955513399949394882899846917836100182597890103160196183503434181391479795551339994939488289984691783610018259789010316019618350343448956870538452085380458424156548248893338047475871128339598968522325444895687053845208538045842415654824889333804747587112833959896852232544608408971119771276941207958624405471613210050064598201769617718094781160840897111977127694120795862440547161321005006459820176961771809478113622002723448272249323259547234688002927776497906148129840428345720146362200272344827224932325954723468800292777649790614812984042834572014634896854716908235473783566197218622496943162271666393905543024156473293489685471690823547378356619721862249694316227166639390554302415647329248552489912257394665486271404821171381243882177176029841255244647445024855248991225739466548627140482117138124388217717602984125524464744505583462814488335631902725319590439283873764073916891257924055015620889558346281448833563190272531959043928387376407391689125792405501562088978716337599910788708490815909754801928576845198859630532382349055809207871633759991078870849081590975480192857684519885963053238234905580920329996032344711407760198471635311617130785760848622363702835701049612532999603234471140776019847163531161713078576084862236370283570104961259568184678596533310077017991614674472549272833486916000647585917462781956818467859653331007701799161467447254927283348691600064758591746278121269007351830924153010630289329566584366200080047677896798438209079762126900735183092415301063028932956658436620008004767789679843820907976198594936463093805863367214696959750279687712057249966669805614533820719859493646309380586336721469695975027968771205724996666980561453382074120315933770309949152746918356593762102220068126798273445760938020304412031593377030994915274691835659376210222006812679827344576093802030447912277498091795593838712100058876668925844870047077255249706044465214791227749809179559383871210005887666892584487004707725524970604446521271304043211826101035911864766629638584950874484973734768614208805294427130404321182610103591186476662963858495087448497373476861420880529443 3
9393
DeCSS: The imagesDeCSS: The images
9494
DeCSS: The recordingsDeCSS: The recordings
All this info from All this info from http://www-2.cs.cmu.edu/~dst/DeCSS/Gallhttp://www-2.cs.cmu.edu/~dst/DeCSS/Gallery/ery/
Or do a Google search for “decss gallery”Or do a Google search for “decss gallery”
9595
DeCSS: The movieDeCSS: The movie
9696
Vector classVector class
This is also the review This is also the review
for the third midtermfor the third midterm
97
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
98
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…
99
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
100
Our first take on our Vector classpublic 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
101
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
102
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;
}
103
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
104
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;
}
105
Miscellaneous other methods
public int size() {return size;
}
public Object get (int which) {return array[which];
}
106106
Today’s demotivatorsToday’s demotivators
107
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;
}
108
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);
}
109109
Program DemoProgram Demo
VectorUsage.javaVectorUsage.java
110
The “real” Vector class Java provides a Vector class
In java.util
It contains all of the methods shown
111111
Program DemoProgram Demo
VectorUsage.javaVectorUsage.java But using java.util.VectorBut using java.util.Vector
112
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
113
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
114
How are we How are we doing with Vectors?doing with Vectors?
a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s an array again?I’m so lost. What’s an array again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
116116
Wrapper classesWrapper classes
117
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!
118
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…
119
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
120
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?
121
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
122
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);
123
How are we How are we doing with Wrapper doing with Wrapper
classes?classes?a)a) Very well! This stuff is so easy.Very well! This stuff is so easy.
b)b) With a little review, I’ll be good.With a little review, I’ll be good.
c)c) Not very well at all.Not very well at all.
d)d) I’m so lost. What’s Java again?I’m so lost. What’s Java again?
e)e) I’d rather not answer this question, I’d rather not answer this question, thanks.thanks.
124124
Star Wars Episode 3 TrailerStar Wars Episode 3 Trailer
125125
Star Wars Episode 3 TrailerStar Wars Episode 3 Trailer
That was a edited versionThat was a edited version– I changed the PG-rated trailer to a G-I changed the PG-rated trailer to a G-
rated trailerrated trailer
The original one can be found at The original one can be found at http://www.sequentialpictures.com/http://www.sequentialpictures.com/– Or Google for “star wars parody”Or Google for “star wars parody”