Arrays

121
1 Arrays Chapter 8 Fall 2006 CS 101 Aaron Bloomfield

description

Arrays. Chapter 8 Fall 2006 CS 101 Aaron Bloomfield. Introduction to arrays. 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 - PowerPoint PPT Presentation

Transcript of Arrays

Page 1: Arrays

1

Arrays

Chapter 8Fall 2006CS 101Aaron Bloomfield

Page 2: Arrays

22

Introduction to arraysIntroduction to arrays

Page 3: 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

Page 4: Arrays

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

Page 5: Arrays

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();

Page 6: Arrays

6

Array variable definition styles Without initialization

Type ofvalues in

list

Name oflist

Bracketsindicate arrayvariable being

defined

ElementType [ ] id;

int [] a;int a[];

Page 7: Arrays

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

Page 8: Arrays

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)

Page 9: Arrays

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

Page 10: Arrays

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…

Page 11: Arrays

1212

New 2005 demotivatiors!New 2005 demotivatiors!

Page 12: Arrays

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

Page 13: Arrays

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;

Page 14: Arrays

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

Page 15: Arrays

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;

Page 16: Arrays

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()

Page 17: Arrays

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);

Page 18: Arrays

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]

Page 19: Arrays

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();}

Page 20: Arrays

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)

Page 21: Arrays

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]);

Page 22: Arrays

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

Page 23: Arrays

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;

Page 24: Arrays

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.

Page 25: Arrays

2727

ArrayToolsArrayTools

Page 26: Arrays

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

Page 27: Arrays

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) { ...}

Page 28: Arrays

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);

Page 29: Arrays

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;

}

Page 30: Arrays

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);

Page 31: Arrays

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 ();

}}

Page 32: Arrays
Page 33: Arrays

3535

ArrayTools demo…ArrayTools demo…

ArrayDemo.javaArrayDemo.java

Page 34: Arrays

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.

Page 35: Arrays

3737

Today’s demotivatorsToday’s demotivators

Page 36: Arrays

3838

… … main (String args[])main (String args[])

Page 37: Arrays

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] +

"'");}

}}

Page 38: Arrays

4040

Program DemoProgram Demo

MainParameters.javaMainParameters.java Via JCreatorVia JCreator Via the command lineVia the command line

Page 39: Arrays

4141

Basic array searchingBasic array searching

Page 40: Arrays

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

Page 41: Arrays

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];

}}

Page 42: Arrays

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

Page 43: Arrays

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.

Page 44: Arrays

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/

Page 45: Arrays

4747

SortingSorting

Page 46: Arrays

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

Page 47: Arrays

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

Page 48: Arrays

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

Page 49: Arrays

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

Page 50: Arrays

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

Page 51: Arrays

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

Page 52: Arrays

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;

}}

Page 53: Arrays

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]

Page 54: Arrays

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.

Page 55: Arrays

5757

Very unofficial demotivatorsVery unofficial demotivators

Page 56: Arrays

5858

Binary searchBinary search

Page 57: Arrays

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

Page 58: Arrays

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));

}}

Page 59: Arrays

6161

Binary search use demo…Binary search use demo…

BSDemo.javaBSDemo.java

Page 60: Arrays

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;}

}

Page 61: Arrays

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

Page 62: Arrays

64

Binary search But what if the element is not in the list?

Page 63: Arrays

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

Page 64: Arrays

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.

Page 65: Arrays

67

Binary search A somewhat alternative view of what a binary search does…

Page 66: Arrays

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

Page 67: Arrays

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

Page 68: Arrays

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.

Page 69: Arrays

7272

Multi-dimensional arraysMulti-dimensional arrays

Page 70: 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

Page 71: Arrays

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

Page 72: Arrays

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]

Page 73: Arrays

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

Page 74: Arrays

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

Page 75: Arrays

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

Page 76: Arrays

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();

}

Page 77: Arrays

8080

Today’s demotivatorsToday’s demotivators

Page 78: Arrays

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]

Page 79: Arrays

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

Page 80: Arrays

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]

Page 81: Arrays

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

Page 82: Arrays

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

Page 83: Arrays

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;}

Page 84: Arrays

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

Page 85: Arrays

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.

Page 86: Arrays

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);}

Page 87: Arrays

9090

DeCSS: The shirt (and tie!)DeCSS: The shirt (and tie!)

Page 88: Arrays

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

Page 89: Arrays

9292

DeCSS: The numberDeCSS: The number The world’s first illegal prime number:The world’s first illegal prime number:

48565078965739782930984189469428613770744208735135792401965207366869854856507896573978293098418946942861377074420873513579240196520736686985134010472374469687974399261175109737777010274475280490588313840375497013401047237446968797439926117510973777701027447528049058831384037549709987909653955227011712157025974666993240226834596619606034851742497735998790965395522701171215702597466699324022683459661960603485174249773584685188556745702571254749996482194184655710084119086259716947970799158468518855674570257125474999648219418465571008411908625971694797079915200486670997592359606132072597379799361886063169144735883002453369727820048667099759235960613207259737979936188606316914473588300245336972781813914797955513399949394882899846917836100182597890103160196183503434181391479795551339994939488289984691783610018259789010316019618350343448956870538452085380458424156548248893338047475871128339598968522325444895687053845208538045842415654824889333804747587112833959896852232544608408971119771276941207958624405471613210050064598201769617718094781160840897111977127694120795862440547161321005006459820176961771809478113622002723448272249323259547234688002927776497906148129840428345720146362200272344827224932325954723468800292777649790614812984042834572014634896854716908235473783566197218622496943162271666393905543024156473293489685471690823547378356619721862249694316227166639390554302415647329248552489912257394665486271404821171381243882177176029841255244647445024855248991225739466548627140482117138124388217717602984125524464744505583462814488335631902725319590439283873764073916891257924055015620889558346281448833563190272531959043928387376407391689125792405501562088978716337599910788708490815909754801928576845198859630532382349055809207871633759991078870849081590975480192857684519885963053238234905580920329996032344711407760198471635311617130785760848622363702835701049612532999603234471140776019847163531161713078576084862236370283570104961259568184678596533310077017991614674472549272833486916000647585917462781956818467859653331007701799161467447254927283348691600064758591746278121269007351830924153010630289329566584366200080047677896798438209079762126900735183092415301063028932956658436620008004767789679843820907976198594936463093805863367214696959750279687712057249966669805614533820719859493646309380586336721469695975027968771205724996666980561453382074120315933770309949152746918356593762102220068126798273445760938020304412031593377030994915274691835659376210222006812679827344576093802030447912277498091795593838712100058876668925844870047077255249706044465214791227749809179559383871210005887666892584487004707725524970604446521271304043211826101035911864766629638584950874484973734768614208805294427130404321182610103591186476662963858495087448497373476861420880529443 3

Page 90: Arrays

9393

DeCSS: The imagesDeCSS: The images

Page 91: Arrays

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”

Page 92: Arrays

9595

DeCSS: The movieDeCSS: The movie

Page 93: Arrays

9696

Vector classVector class

This is also the review This is also the review

for the third midtermfor the third midterm

Page 94: Arrays

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

Page 95: Arrays

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…

Page 96: Arrays

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

Page 97: Arrays

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

Page 98: Arrays

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

Page 99: Arrays

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;

}

Page 100: Arrays

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

Page 101: Arrays

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;

}

Page 102: Arrays

105

Miscellaneous other methods

public int size() {return size;

}

public Object get (int which) {return array[which];

}

Page 103: Arrays

106106

Today’s demotivatorsToday’s demotivators

Page 104: Arrays

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;

}

Page 105: Arrays

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);

}

Page 106: Arrays

109109

Program DemoProgram Demo

VectorUsage.javaVectorUsage.java

Page 107: Arrays

110

The “real” Vector class Java provides a Vector class

In java.util

It contains all of the methods shown

Page 108: Arrays

111111

Program DemoProgram Demo

VectorUsage.javaVectorUsage.java But using java.util.VectorBut using java.util.Vector

Page 109: Arrays

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

Page 110: Arrays

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

Page 111: Arrays

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.

Page 112: Arrays

116116

Wrapper classesWrapper classes

Page 113: Arrays

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!

Page 114: Arrays

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…

Page 115: Arrays

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

Page 116: Arrays

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?

Page 117: Arrays

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

Page 118: Arrays

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);

Page 119: Arrays

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.

Page 120: Arrays

124124

Star Wars Episode 3 TrailerStar Wars Episode 3 Trailer

Page 121: Arrays

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”