Sunteți pe pagina 1din 122

Arrays

Chapter 8 Spring 2007 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 The Vector class is an example of a collection class Consider arrays first

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 0 1
v[0]

8 is displayed Suppose 3 is extracted

0
v[1]

0 8
v[2]

0 6
v[3]

0 3
v[4]

0
v[5]

0
v[6]

0 5
v[7]

12 0
v[8]

0
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

Where weve 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)

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

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

12

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

13

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[0] p[1] null p[2] null

null

Point: (4, 4)

Point: (1, (0, 0)

Point: (1, 2) 1)

Point: (2, 2)

14

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


15

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

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

17

Chapter 2: Computer bugs

18

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)

Point: (1, 1)

v
v[0] v[1]

Point: (4, 30)


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].setX(10); u[0] u[1]
u

Point: (0, 0)

(1, 1) Point: (10, 1)

v
20

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

21

Making a deep copy


u[0] u[1] u[2]

Point: (0, 0)

Point: (2, 1)

Point: (2, 2)

w[0]

w[1]

w[2]

Point: (0, 0)

Point: (2, 1)

Point: (2, 2)
22

How Java represents arrays


Consider int[] a = { 1, 2, 3, 4, 5 };

Array - length = 5 a - data = 1 + 1 2 2 3 3 4 5 4 5

23

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 c d null 0 1 0 2 0 3 0 4 0 5
24

Todays demotivators

25

How are we doing with arrays?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

26

ArrayTools

27

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

28

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

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

30

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

31

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

32

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

(numbers); (""); ("Your list in reverse"); (numbers); ();

ArrayTools demo

ArrayDemo.java

35

How are we doing with ArrayTools?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

36

A solution to commenting your code


The

commentator: http://www.cenqua.com/commentator/

37

main (String args[])

38

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] + "'"); } } 39 }

Program Demo

MainParameters.java

Via JCreator Via the command line

40

Basic array searching

41

Searching for a value


System.out.println("Enter search value (number): "); int key = stdin.nextInt(); int i; i = 0 for (i 0; i < data.length data.length; ++i ++i) { if (key == data[i]) { break; } }
0 1 2

data key i

4 5 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");42 }

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

43

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

82

11

29

85

11

29

91

Consider int[] score = { 6, 9, 82, 11, 29, 85, 11, 28, 91 }; int i1 = sequentialSearch(score, 11); 44 int i2 = sequentialSearch(score, 30);

How are we doing with searching?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

45

Follow-up on Knut the polar bear cub


http://www.comedycentral.com/motherloa

d/?ml_video=84023

46

sequentialSearch() finding an element


public static int sequentialSearch(int[] data, int key) { int i = 0 for (int 0; i < data.length data.length; ++i ++i) { key 11 if (data[i] == key) { return i; i 3 2 1 0 } 3 i1 } return -1; }
data 6
0

9
1

82
2

11
3

29
4

85
5

Consider int[] score = { 6, 9, 82, 11, 29, 85 }; int i1 = sequentialSearch(score, 11);


47

sequentialSearch() not finding an element


public static int sequentialSearch(int[] data, int key) { int i = 0 for (int 0; i < data.length data.length; ++i ++i) { key 11 if (data[i] == key) { return i; i 3 2 1 0 6 5 4 } -1 i1 } return -1; }
data 6
0

9
1

82
2

11
3

29
4

85
5

Consider int[] score = { 6, 9, 82, 11, 29, 85 }; int i1 = sequentialSearch(score, 30);


48

How are we doing with searching?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

49

Sorting

50

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

51

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
0 1 2 3 4 5 6 7 8 9

Q' 'E'

'W'

E' 'Q'

'R'

'T'

'Y'

'U'

'I'

'O'

'P'
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 1 Swaps second smallest element with v[1] This results in second smallest element being in the correct place for a sorted result
0 1 2 3 4 5 6 7 8 9

'E'

'W' 'I'

'Q'

'R'

'T'

'Y'

'U'

'I' 'W'

'O'

'P'
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 2 Swaps third smallest element with v[2] This results in third smallest element being in the correct place for a sorted result
0 1 2 3 4 5 6 7 8 9

'E'

'I'

'Q' O'

'R'

'T'

'Y'

'U'

'W'

'O' Q'

'P'
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 3 Swaps fourth smallest element with v[3] This results in fourth smallest element being in the correct place for a sorted result
0 1 2 3 4 5 6 7 8 9

'E'

'I'

O'

'R' P'

'T'

'Y'

'U'

'W'

Q'

'P' R'
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 4 Swaps fifth smallest element with v[4] This results in fifth smallest element being in the correct place for a sorted result
0 1 2 3 4 5 6 7 8 9

'E'

'I'

O'

P'

'T' Q'

'Y'

'U'

'W'

Q' T'

R'
56

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

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]

58

How are we doing with sorting?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

59

New 2008 demotivators

60

Binary search

61

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

62

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

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

Binary search use demo

BSDemo.java

64

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

Binary search, take 1


public static int binarySearch (int[] data, int key) {
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; } } if ( key == data[i] ) { return i; } else { return -1; }

key

14 6

returns: a6 14 a7 16 a8 18 a9 20

a0 data 2

a1 4

a2 6

a3 8

a4 10

a5 12

0 5 6

4 7 6 5

9 7 6

66

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

67

Binary search, take 2


public static int binarySearch (int[] data, int key) {
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; } } if ( key == data[i] ) { return i; } else { return -1; }

key

15 -1

returns: a6 14 a7 16 a8 18 a9 20

a0 data 2

a1 4

a2 6

a3 8

a4 10

a5 12

0 5 7

4 7 6

9 7

68

How are we doing with binary search?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

69

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

70

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

71

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

72

How are we doing with binary search?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

73

Vector class

74

Limitations of arrays
You cant 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

Lets call the class Vector As we are basically writing the java.util.Vector class

75

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

76

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

77

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? Well see that a bit later But briefly, it means the array can store any object

78

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

79

Increasing the Vectors arrays 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; }

80

Methods can be private as well


Notice that the increaseCapacity() method is called only by the add() method when necessary Its 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

81

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

82

Safety Awards
safety_Awards_2006.pps

83

Miscellaneous other methods


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

84

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

85

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

86

Program Demo

VectorUsage.java

87

The real Vector class


Java provides a Vector class In java.util It contains all of the methods shown

88

Program Demo

VectorUsage.java

But using java.util.Vector

89

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

90

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

91

How are we doing with Vectors?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

92

Stuff you dont see everyday


StuffYouDontSeeEveryDay.pps

93

Multi-dimensional arrays

94

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

95

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[1] m[2]
m[2][0]

When an array is created, each value is initialized!

m[2][1]

m[2][2]

m[2][3]

0
m[0][0]

0
m[0][1]

0
m[0][2]

0
m[0][3]

0
m[1][0]

0
m[1][1]

0
m[1][2]

0
m[1][3]

96

Example
Alternative int[][] m = new int[3][4];

Produces
m[0] m[1] m[2]
m[2][0] m[2][1] m[2][2] m[2][3]

0
m[0][0]

0
m[0][1]

0
m[0][2]

0
m[0][3]

0
m[1][0]

0
m[1][1]

0
m[1][2]

0
m[1][3]

97

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
98

or

0 0 0

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
99

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 0 0 0 0 0 0 0 0 0 0

or

0 0

The answer is that it can be either As long as you are consistent with your column/row 100 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(); }

101

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]

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
102

s[1][0] s[1][1]

Multidimensional array visualization


Segment String[][] s[0] = new s[1] = new s[2] = new s[3] = new Produces
0 0

s = new String[4][]; String[2]; String[2]; String[4]; String[3];


0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

or

Called a ragged array

103

Fractals

104

Fractal zooming
http://www.fractalartcontests.com/2000/e

n/entry-004-7.htm

105

Explicit Initialization
Segment int c[][] = {{1, 2}, {3, 4}, {5, 6}, {7, 8, 9}}; Produces
c[0] c[1] c[2] c[3]

c[3][0] c[3][1] c[3][2]

c[2][0] c[2][1]

2 3 4

c[0][0] c[0][1]

c[1][0] c[1][1]

106

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
107

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

108

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

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

110

How are we doing with 2-D arrays?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

111

Driving in Bolivia
DrivingInBolivia.pps

112

Wrapper classes

113

But what about adding variables?


The add method takes an Object as a parameter public void add (Object o) { Although we havent 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!

114

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 well see how to get around it in a bit

115

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

116

More on wrapper classes


Consider this code: int x = 5; vector.add (x); // int y = vector.get(0); Does this code work? It shouldnt As we are adding a variable (not an object) to a vector But it does work! Why?
117

Auto-boxing
Java 1.5 will automatically wrap a primitive value into its 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

118

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

119

How are we doing with Wrapper classes?


1. 2. 3.

4. 5.

tg re at

Th is

el l

el l!

no

I m

It s

el l.

i rl y

ry

y.

ot

Fa

Ve

ka

ot

at a

ll .

I m

Very well! This stuff is easy! Fairly well with a little review, Ill be good Okay. Its not great, but its not horrible, either Not well. Im kinda confused Not at all. Im soooooo lost.

20% 20% 20% 20% 20%

,b u. ..

t ..

st uf

ki n

so oo

it h

da

oo . ..

.. .

fi

c. ..

l it

120

Star Wars Episode 3 Trailer

121

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

122

S-ar putea să vă placă și