Arrays
Download
1 / 121

Arrays - PowerPoint PPT Presentation


  • 92 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Arrays' - yasir-molina


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Arrays

Arrays

Chapter 8

Fall 2006

CS 101

Aaron Bloomfield



Background
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

c

-

value

0

0

0

0

0

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


An array example
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();

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

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

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

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

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

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

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

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

8 is displayed

Suppose 3 is extracted


Array variable definition styles

ElementType

[ ]

id;

Brackets

Name of

Type of

indicate array

list

values in

variable being

list

defined

Array variable definition styles

  • Without initialization

int [] a;

int a[];


Array variable definition styles1

Nonnegative integer expression specifying the

number of elements in the array

ElementType

id

ElementType [n];

=

new

[

]

A new array of n

elements

Array variable definition styles

  • With initialization


Where we ve seen arrays
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)


Basic terminology
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


Java array features
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…



Consider
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


Consider1

vertex

vertex

vertex

p[0]

p[0]

p[0]

p[0]

p[0]

p[0]

p[0]

p[1]

p[1]

p[1]

p[1]

p[1]

p[1]

p[1]

p[2]

p[2]

p[2]

p[2]

p[2]

p[2]

p[2]

null

null

null

p

p

p

p

p

p

p

Point: (4, 4)

Point: (4, 4)

Point: (4, 4)

Point: (1, 0)

Point: (0, 0)

Point: (1, 0)

Point: (1, 0)

Point: (1, 0)

Point: (1, 0)

Point: (1, 1)

Point: (1, 2)

Point: (1, 1)

Point: (1, 2)

Point: (2, 2)

Point: (2, 2)

Point: (2, 2)

Point: (2, 2)

Point: (2, 2)

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;

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;


Explicit initialization

id references an array of n elements. id[0] has

value exp0, id[1] has value exp1, and so on.

Each expiis an expression that

evaluates to type ElementType

Explicit initialization

  • Syntax

ElementType

id

exp

,

exp

,

...

exp

[]

= {

}

;

0

1

-1

n


Explicit initialization1
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;


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


Array members1

u[0]

u[0]

u[0]

u[1]

u[1]

u[1]

u

u

u

Point: (0, 0)

Point: (0, 0)

Point: (0, 0)

Point: (1, 1)

Point: (1, 1)

Point: (1, 1)

v

v

Point: (4, 30)

v[0]

v[0]

v[1]

v[1]

Array members

  • Member clone()

    • Produces a shallow copy

      Point[] u = { new Point(0, 0), new Point(1, 1)};

      Point[] v = u.clone();

      v[1] = new Point(4, 30);

Point[] u = { new Point(0, 0), new Point(1, 1)};

Point[] v = u.clone();

v[1] = new Point(4, 30);


Array members2

u[0]

u[0]

u[0]

u[1]

u[1]

u[1]

u

u

u

Point: (0, 0)

Point: (0, 0)

Point: (0, 0)

Point: (10, 1)

Point: (1, 1)

Point: (1, 1)

v

v

v[0]

v[0]

v[1]

v[1]

Array members

Point[] u = { new Point(0, 0), new Point(1, 1)};

Point[] v = u.clone();

v[1].setX(10);

  • Member clone()

    • Produces a shallow copy

      Point[] u = { new Point(0, 0), new Point(1, 1)};

      Point[] v = u.clone();

      v[1].setX(10);


Making a deep copy
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();

    }



Review of arrays
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]);


How java represents arrays

Array

- length = 5

- data =

+ …

1

2

3

4

5

1

2

3

4

5

How Java represents arrays

  • Consider

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

a


More about how java represents arrays

c

d

b

null

a

1

0

2

0

3

0

4

0

5

0

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;

int[] a;

int[] b = null;

int[] c = new int[5];

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

a = c;

d = c;

-


How are we doing with arrays
How are we doing with arrays?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s an array again?

  • I’d rather not answer this question, thanks.



Arraytools java
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


Arraytools java outline
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) { ...

}


Arraytools java method putlist
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);


Arraytools java method getlist
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;

}


Arraytools java method reverse
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);


Arraydemo java
ArrayDemo.java

public class ArrayDemo {

// main(): application entry point

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

}

}


Arraytools demo
ArrayTools demo…

  • ArrayDemo.java


How are we doing with arraytools
How are we doing with ArrayTools?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s an array again?

  • I’d rather not answer this question, thanks.




Consider that main method again
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] + "'");

    }

    }

    }


Program demo
Program Demo

  • MainParameters.java

    • Via JCreator

    • Via the command line



Searching for a value
Searching for a value

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

i < data.length


Searching for the minimum value
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];

    }

    }


Arraytools java method sequentialsearch
ArrayTools.java method sequentialSearch()

publicstaticintsequentialSearch(int[]data,int key){

for (int i = 0; i < data.length; ++i) {

if (data[i] == key) {

return i;

}

}

return -1;

}

  • Consider

    int[] score = {6,9,82,11,29,85,11,28, 91};

    int i1 = sequentialSearch(score,11);

    int i2 = sequentialSearch(score,30);


How are we doing with searching
How are we doing with searching?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s a search again?

  • I’d rather not answer this question, thanks.


A solution to commenting your code
A solution to commenting your code

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



Sorting1
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


Selection sorting

0

0

0

1

1

1

2

2

2

3

3

3

4

4

4

5

5

5

6

6

6

7

7

7

8

8

8

9

9

9

v

v

v

‘Q'

'E'

‘Q'

'W'

'W'

'W'

'Q'

‘E'

‘E'

'R'

'R'

'R'

'T'

'T'

'T'

'Y'

'Y'

'Y'

'U'

'U'

'U'

'I'

'I'

'I'

'O'

'O'

'O'

'P'

'P'

'P'

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


Selection sorting1

0

0

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

v

v

'E'

'E'

'W'

'I'

'Q'

'Q'

'R'

'R'

'T'

'T'

'Y'

'Y'

'U'

'U'

'W'

'I'

'O'

'O'

'P'

'P'

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


Selection sorting2

0

0

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

v

v

'E'

'E'

'I'

'I'

'Q'

‘O'

'R'

'R'

'T'

'T'

'Y'

'Y'

'U'

'U'

'W'

'W'

‘Q'

'O'

'P'

'P'

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


Selection sorting3

0

0

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

v

v

'E'

'E'

'I'

'I'

‘O'

‘O'

'R'

‘P'

'T'

'T'

'Y'

'Y'

'U'

'U'

'W'

'W'

‘Q'

‘Q'

'P'

‘R'

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


Selection sorting4

0

0

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

v

v

'E'

'E'

'I'

'I'

‘O'

‘O'

‘P'

‘P'

‘Q'

'T'

'Y'

'Y'

'U'

'U'

'W'

'W'

‘T'

‘Q'

‘R'

‘R'

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


Arraytools java selection sorting
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;

}

}


Iteration i
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;

}

// spotisnowcorrect,swap elementsv[spot]andv[i]


How are we doing with sorting
How are we doing with sorting?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s a sort again?

  • I’d rather not answer this question, thanks.




Binary search1
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


Binary search use
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));

    }

    }



Binary search2
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;

}

}


Binary search take 1

key

14

returns:

6

i

j

m

Binary search, take 1

public static int binarySearch (int[] data, int key) {

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;

}

}

if ( key == data[i] ) {

return i;

} else {

return -1;

}

if ( key == data[i] ) {

return i;

} else {

return -1;

}

data

5

6

0

4

7

6

5

7

9

6


Binary search3
Binary search

  • But what if the element is not in the list?


Binary search take 2

key

15

returns:

-1

i

j

m

Binary search, take 2

public static int binarySearch (int[] data, int key) {

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;

}

}

if ( key == data[i] ) {

return i;

} else {

return -1;

}

if ( key == data[i] ) {

return i;

} else {

return -1;

}

data

0

5

7

7

6

4

7

9


How are we doing with binary search
How are we doing with binary search?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s a search again?

  • I’d rather not answer this question, thanks.


Binary search4
Binary search

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


How long does a binary search take
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 log2n iterations!

    • Where n is the size of the array


Binary search vs sequential search
Binary search vs. sequential search

  • Assume the array has n elements

  • Sequential search takes n iterations to find the element

  • Binary search takes log2n 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


How are we doing with binary search1
How are we doing with binary search?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s a search again?

  • I’d rather not answer this question, thanks.



Multidimensional arrays
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


Example1

m[0]

m[1]

m[2]

m[2][0]

m[2][1]

m[2][2]

m[2][3]

m

0

0

0

0

0

0

0

0

0

0

0

0

m[0][0]

m[0][1]

m[0][2]

m[0][3]

m[1][0]

m[1][1]

m[1][2]

m[1][3]

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


Example2

m[0]

m[1]

m[2]

m[2][0]

m[2][1]

m[2][2]

m[2][3]

m

0

0

0

0

0

0

0

0

0

0

0

0

m[0][0]

m[0][1]

m[0][2]

m[0][3]

m[1][0]

m[1][1]

m[1][2]

m[1][3]

Example

  • Alternative

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

  • Produces


Multidimensional array visualization

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Multidimensional array visualization

  • A multi-dimensional array declaration (either one):

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

  • How we visualize it:

or


Example3

0

0

0

0

0

0

0

0

0

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

    }

    }


Rows by columns or columns by rows

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

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

or


Rows by columns or columns by rows1
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 rowsby 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();

    }



Example4
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


Multidimensional array visualization1
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

or

0

0

0

0

0

0


Explicit initialization2
Explicit Initialization

  • Segment

    int c[][] = {{1, 2}, {3, 4}, {5, 6}, {7, 8, 9}};

  • Produces


Matrices
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


Matrix addition
Matrix addition

  • Definition C = A + B

    • cij = aij + bij

    • cijis sum of the elements in the same row and column of A and B


Matrix addition1
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;

}


Homework j9
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


How are we doing with 2 d arrays
How are we doing with 2-D arrays?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s an array again?

  • I’d rather not answer this question, thanks.


Decss the program
DeCSS: The program

#include<stdlib.h> typedef unsigned int uint; char ctb[512]="33733b2663236b763e7e362b6e2e667bd393db0643034b96de9ed60b4e0e4\ 69b57175f82c787cf125a1a528fca8ac21fd999d10049094190d898d001480840913d7d35246\ d2d65743c7c34256c2c6475dd9dd5044d0d4594dc9cd4054c0c449559195180c989c11058185\ 081c888c011d797df0247074f92da9ad20f4a0a429f53135b86c383cb165e1e568bce8ec61bb\ 3f3bba6e3a3ebf6befeb6abeeaee6fb37773f2267276f723a7a322f6a2a627fb9f9b1a0e9a9e\ 1f0b8f8b0a1e8a8e0f15d1d5584cd8dc5145c1c5485cc8cc415bdfdb5a4edade5f4bcfcb4a5e\ cace4f539793120692961703878302168286071b7f7bfa2e7a7eff2bafab2afeaaae2ff"; 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){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\ [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\ >>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 \ 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!=\ 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;\ 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]=\ 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 im2[6]={0x51,0x67,0x67,0xc5,0xe0,0x00};for(i=0;i<6;i++)im1[i]=dkey[i]; CSStitlekey1(im1,im2);CSStitlekey2(tkey,im1);}



Decss the poem
DeCSS: The poem

How to decrypt a

DVD: in haiku form.

(Thanks, Prof. D. S. T.)

------------------------

(I abandon my

exclusive rights to make or

perform copies of

this work, U. S. Code

Title Seventeen, section

One Hundred and Six.)

Muse! When we learned to

count, little did we know all

the things we could do

some day by shuffling

those numbers: Pythagoras

said "All is number"

long before he saw

computers and their effects,

or what they could do

Table Zero is:

Five, zero, one, two, three, four,

oh, one, two, three, four.

Table One is long:

two to the eighth power bytes.

Ready? Here they are:

Fifty one; then one

hundred fifteen; fifty nine;

thirty eight; ninety

nine; thirty five; one

hundred seven; one hundred

eighteen; sixty two;

one hundred twenty

six; fifty four; forty three;

one hundred ten; then


Decss the number
DeCSS: The number

  • The world’s first illegal prime number:

    485650789657397829309841894694286137707442087351357924019652073668698513401047237446968797439926117510973777701027447528049058831384037549709987909653955227011712157025974666993240226834596619606034851742497735846851885567457025712547499964821941846557100841190862597169479707991520048667099759235960613207259737979936188606316914473588300245336972781813914797955513399949394882899846917836100182597890103160196183503434489568705384520853804584241565482488933380474758711283395989685223254460840897111977127694120795862440547161321005006459820176961771809478113622002723448272249323259547234688002927776497906148129840428345720146348968547169082354737835661972186224969431622716663939055430241564732924855248991225739466548627140482117138124388217717602984125524464744505583462814488335631902725319590439283873764073916891257924055015620889787163375999107887084908159097548019285768451988596305323823490558092032999603234471140776019847163531161713078576084862236370283570104961259568184678596533310077017991614674472549272833486916000647585917462781212690073518309241530106302893295665843662000800476778967984382090797619859493646309380586336721469695975027968771205724996666980561453382074120315933770309949152746918356593762102220068126798273445760938020304479122774980917955938387121000588766689258448700470772552497060444652127130404321182610103591186476662963858495087448497373476861420880529443



Decss the recordings
DeCSS: The recordings

  • All this info from http://www-2.cs.cmu.edu/~dst/DeCSS/Gallery/

  • Or do a Google search for “decss gallery”



Vector class

Vector class

This is also the review

for the third midterm


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


Properties of our vector class
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…


Methods in our vector class
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


Our first take on our vector class
Our first take on our Vector class

public class Vector {

private Object array[];

private int size = 0;

Vector() {

array = new Object[100];

}

Vector(int length) {

array = new Object[length];

}

}

  • What does this mean?

    • We’ll see that a bit later…

    • But briefly, it means the array can store any object


Adding an element to our vector
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


Increasing the vector s array s capacity
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;

    }


Methods can be private as well
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


Removing an element from a vector
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;

}


Miscellaneous other methods
Miscellaneous other methods

public int size() {

return size;

}

public Object get (int which) {

return array[which];

}



Our tostring method
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;

}


Using our vector
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);

    }


Program demo1
Program Demo

  • VectorUsage.java


The real vector class
The “real” Vector class

  • Java provides a Vector class

    • In java.util

  • It contains all of the methods shown


Program demo2
Program Demo

  • VectorUsage.java

    • But using java.util.Vector


What about those errors
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


More on using the vector class
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


How are we doing with vectors
How are we doing with Vectors?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s an array again?

  • I’d rather not answer this question, thanks.



But what about adding variables
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!


The integer wrapper class
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…


More on wrapper classes
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


More on wrapper classes1
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?


Auto boxing
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


More on auto boxing
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);


How are we doing with wrapper classes
How are we doing with Wrapper classes?

  • Very well! This stuff is so easy.

  • With a little review, I’ll be good.

  • Not very well at all.

  • I’m so lost. What’s Java again?

  • I’d rather not answer this question, thanks.



Star wars episode 3 trailer1
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”


ad