1 Arrays Chapter 8 Spring 2007 CS 101 Aaron Bloomfield.

Slides:



Advertisements
Similar presentations
Arrays and ArrayLists Ananda Gunawardena. Introduction Array is a useful and powerful aggregate data structure presence in modern programming languages.
Advertisements

Arrays Chapter 6. Outline Array Basics Arrays in Classes and Methods Sorting Arrays Multidimensional Arrays.
Arrays.
Multidimensional arrays Many problems require information be organized as a two- dimensional or multidimensional list Examples –Matrices –Graphical animation.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Programming with Collections Collections in Java Using Arrays Week 9.
Horstmann chapter 8 continued. Sorting arrays The telephone book is easy to use, because the entries are sorted Sorting is a common task, and many many.
1 2-D Arrays Overview l Why do we need Multi-dimensional array l 2-D array declaration l Accessing elements of a 2-D array l Declaration using Initializer.
Introduction to Computers and Programming Lecture 15: Arrays Professor: Evan Korth New York University.
1 Arrays b An array is an ordered list of values An array of size N is indexed from zero to N-1 scores.
1 Arrays  Arrays are objects that help us organize large amounts of information  Chapter 8 focuses on: array declaration and use passing arrays and array.
Arrays Data Structures - structured data are data organized to show the relationship among the individual elements. It usually requires a collecting mechanism.
C++ for Engineers and Scientists Third Edition
Chapter 8 Arrays and Strings
1 CSCE 1030 Computer Science 1 Arrays Chapter 7 in Small Java.
CS 106 Introduction to Computer Science I 10 / 16 / 2006 Instructor: Michael Eckmann.
Arrays Jiafan Zhou. 2 Background  Programmer often need the ability to represent a group of values as a list List may be one-dimensional or multidimensional.
Chapter 6Java: an Introduction to Computer Science & Programming - Walter Savitch 1 l Array Basics l Arrays in Classes and Methods l Programming with Arrays.
CS1101: Programming Methodology Aaron Tan.
Chapter 7: Arrays. In this chapter, you will learn about: One-dimensional arrays Array initialization Declaring and processing two-dimensional arrays.
Week 11 Introduction to Computer Science and Object-Oriented Programming COMP 111 George Basham.
Chapter 8 Arrays and Strings
5-Aug-2002cse Arrays © 2002 University of Washington1 Arrays CSE 142, Summer 2002 Computer Programming 1
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2009 Pearson Education, Inc., Upper.
Arrays Module 6. Objectives Nature and purpose of an array Using arrays in Java programs Methods with array parameter Methods that return an array Array.
Arrays and ArrayLists in Java L. Kedigh. Array Characteristics List of values. A list of values where every member is of the same type. Each member in.
Object-Oriented Program Development Using Java: A Class-Centered Approach, Enhanced Edition.
Chapter 6- Arrays. Overview n What are arrays? n Declaring/initializing arrays. n Using arrays. n Arrays details. n Using arrays with classes/ in classes.
Arrays BCIS 3680 Enterprise Programming. Overview 2  Array terminology  Creating arrays  Declaring and instantiating an array  Assigning value to.
ARRAYS Computer Engineering Department Java Course Asst. Prof. Dr. Ahmet Sayar Kocaeli University - Fall
Arrays An array is a data structure that consists of an ordered collection of similar items (where “similar items” means items of the same type.) An array.
Chapter 6Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 6 l Array Basics l Arrays and Methods l Programming with Arrays.
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Arrays.
CS1101: Programming Methodology Aaron Tan.
M180: Data Structures & Algorithms in Java Arrays in Java Arab Open University 1.
1 Arrays Chapter 8 Spring 2006 CS 101 Aaron Bloomfield.
C++ for Engineers and Scientists Second Edition Chapter 11 Arrays.
1 Even even more on being classy Aaron Bloomfield CS 101-E Chapter 4+
1 Building Java Programs Chapter 7: Arrays These lecture notes are copyright (C) Marty Stepp and Stuart Reges, They may not be rehosted, sold, or.
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
Arrays. Background  Programmer often need the ability to represent a group of values as a list List may be one-dimensional or multidimensional  Java.
Arrays. Background  Programmer often need the ability to represent a group of values as a list List may be one-dimensional or multidimensional  Java.
JAVA: An Introduction to Problem Solving & Programming, 6 th Ed. By Walter Savitch ISBN © 2012 Pearson Education, Inc., Upper Saddle River,
Chapter 4 Generic Vector Class. Agenda A systemic problem with Vector of Object – Several approaches at a solution – Generic structures Converting classes.
 2008 Pearson Education, Inc. All rights reserved. 1 Arrays and Vectors.
1 Arrays Spring 2006 UVA - CS 101 Aaron Bloomfield Edited for WLCS by Paul Bui.
How do you do the following? Find the number of scores within 3 points of the average of 10 scores? What kind of a tool do you need? Today’s notes: Include.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 Khalid Siddiqui.
1 Arrays. 2 Background  Programmer often need the ability to represent a group of values as a list List may be one-dimensional or multidimensional 
Arrays Chapter 7. MIS Object Oriented Systems Arrays UTD, SOM 2 Objectives Nature and purpose of an array Using arrays in Java programs Methods.
1 Arrays. 2 Background  Programmer often need the ability to represent a group of values as a list List may be one-dimensional or multidimensional 
Chapter 8 Slides from GaddisText Arrays of more than 1 dimension.
Arrays Declaring arrays Passing arrays to functions Searching arrays with linear search Sorting arrays with insertion sort Multidimensional arrays Programming.
Chapter 9 Introduction to Arrays Fundamentals of Java.
Arrays Chap. 9 Storing Collections of Values 1. Introductory Example Problem: Teachers need to be able to compute a variety of grading statistics for.
Arrays Chapter 7.
Lecture 5 of Computer Science II
Computer Programming BCT 1113
Arrays.
Arrays Continued.
Chapter 8 Fall 2006 CS 101 Aaron Bloomfield
Chapter 8 Spring 2006 CS 101 Aaron Bloomfield
Building Java Programs
Consider Write a program that prompts a user to enter the number of students and then, their names and grades. The program will then outputs the average.
COMS 261 Computer Science I
Review for Midterm 3.
Arrays.
Presentation transcript:

1 Arrays Chapter 8 Spring 2007 CS 101 Aaron Bloomfield

2 Introduction to arrays

3 Background  Programmer often need the ability to represent a group of values as a list List may be one-dimensional or multidimensional  Java provides arrays and the collection classes The Vector class is an example of a collection class  Consider arrays first

4 Example  Definitions char[] c; int[] value = new int[10];  Causes Array object variable c is un-initialized Array object variable value references a new ten element list of integers  Each of the integers is default initialized to 0 value c …

5 An array example int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = stdin.nextInt(); 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 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(); Suppose 3 is extracted int[] v = new int[10]; int i = 7; int j = 2; int k = 4; v[0] = 1; v[i] = 5; v[j] = v[i] + 3; v[j+1] = v[i] + v[0]; v[v[j]] = 12; System.out.println(v[2]); v[k] = stdin.nextInt();

6 Array variable definition styles  Without initialization Type of values in list Name of list Brackets indicate array variable being defined ElementType [ ] id; int [] a; int a[];

7 Array variable definition styles  With initialization ElementType [] id = new ElementType [n]; Nonnegative integer expression specifying the number of elements in the array A new array of n elements

8 Where we’ve seen arrays  public static void main (String[] args) Thus, the main() method takes in a String array as the parameter  Note that you can also define it as: public static void main (String args[])  or public static void main (String[] foobar)

9 Basic terminology  List is composed of elements  Elements in a list have a common name Example: a[3] = 5; The common name is ‘a’  The list as a whole is referenced through the common name  List elements are of the same type — the base type  Elements of a list are referenced by subscripting (indexing) the common name

10 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…

11 Today’s site of the day Link of the day: ist/0,1518,475454,00.html Link of the day: ist/0,1518,475454,00.html ist/0,1518,475454,00.html ist/0,1518,475454,00.html

12 End of lecture on 6 April 2007

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

14 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

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

16 Explicit initialization  Syntax ElementType [] id = { exp 0, 1,... exp n }; id references an array of n elements. id[0] has value exp 0, id[1] has value exp 1, and so on. Each exp i is an expression that evaluates to type ElementType

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

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

19 Chapter 2: Computer bugs

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

21  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]

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

23 Making a deep copy

24 How Java represents arrays  Consider int[] a = { 1, 2, 3, 4, 5 }; a … Array - length = 5 - data = 12345

25 More about how Java represents Arrays  Consider int[] a; int[] b = null; int[] c = new int[5]; int[] d = { 1, 2, 3, 4, 5 }; a = c; d = c; a - b null cd int[] a; int[] b = null; int[] c = new int[5]; int[] d = { 1, 2, 3, 4, 5 }; a = c; d = c;

26 Today’s demotivators

27 How are we doing with arrays? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

28 ArrayTools

29 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

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

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

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

33 End of lecture on 9 April 2007  But should probably review the last slide

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

35 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 (numbers); System.out.println (""); System.out.println ("Your list in reverse"); ArrayTools.putList (numbers); System.out.println (); } }

37 ArrayTools demo… ArrayDemo.java ArrayDemo.java

38 How are we doing with ArrayTools? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

39 A solution to commenting your code The commentator: The commentator:

40 … main (String args[])

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

42 Program Demo MainParameters.java MainParameters.java Via JCreator Via JCreator Via the command line Via the command line

43 Basic array searching

44 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

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

46 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; }  Consider int[] score = { 6, 9, 82, 11, 29, 85, 11, 28, 91 }; int i1 = sequentialSearch(score, 11); int i2 = sequentialSearch(score, 30);

47 How are we doing with searching? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

48 Follow-up on Knut the polar bear cub d/?ml_video= d/?ml_video= d/?ml_video= d/?ml_video=84023

49 End of lecture on 11 April 2007

50 public static int sequentialSearch(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 }; int i1 = sequentialSearch(score, 11); sequentialSearch() finding an element data key11 public static int sequentialSearch(int[] data, int key) { if (data[i] == key) { return i; } } return -1; } int i = 0 i < data.length ++i i i1 3

51 public static int sequentialSearch(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 }; int i1 = sequentialSearch(score, 30); sequentialSearch() not finding an element data key11 public static int sequentialSearch(int[] data, int key) { if (data[i] == key) { } } return -1; } int i = 0 i < data.length ++i i i

52 How are we doing with searching? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

53 Sorting

54 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

55 Selection sorting  Algorithm basis On iteration i, a selection sorting method:  Finds the element containing the i th 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' v‘E'‘Q''W''Y''R''T''I''U''P''O' v'Q''E''W''Y''R''T''I''U''P''O'

56 Selection sorting  Algorithm basis On iteration i, a selection sorting method:  Finds the element containing the i th 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' v'Q''E''I''Y''R''T''W''U''P''O'

57 v'Q''E''I''Y''R''T''W''U''P''O' Selection sorting  Algorithm basis On iteration i, a selection sorting method:  Finds the element containing the i th 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'

58 Selection sorting  Algorithm basis On iteration i, a selection sorting method:  Finds the element containing the i th 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' v‘O''E''I''Y'‘P''T''W''U'‘R'‘Q'

59 Selection sorting  Algorithm basis On iteration i, a selection sorting method:  Finds the element containing the i th 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' v‘O''E''I''Y'‘P'‘Q''W''U'‘R'‘T'

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

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

62 How are we doing with sorting? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

63 New 2008 demotivators

64 Binary search

65 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

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

67 Binary search use demo… BSDemo.java BSDemo.java

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

69 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 a0a0 a1a1 a2a2 a3a3 a4a4 a5a5 a6a6 a7a7 a8a8 a9a9 ijm public static int binarySearch (int[] data, int key) { 0 key returns: 6 data

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

71 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 a0a0 a1a1 a2a2 a3a3 a4a4 a5a5 a6a6 a7a7 a8a8 a9a9 ijm public static int binarySearch (int[] data, int key) { 0 key returns: data 7

72 How are we doing with binary search? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

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

74 How long does a binary search take?  Given a array of 64 elements 1 st iteration cuts the array to 32 2 nd iteration cuts the array to 16 3 rd to 8 4 th to 4 5 th to 2 6 th to 1  Given a array of 1024 elements 1 st iteration cuts the array to th iteration cuts the list to 1 element  Thus, the binary search takes log 2 n iterations! Where n is the size of the array

75 Binary search vs. sequential search  Assume the array has n elements  Sequential search takes n iterations to find the element  Binary search takes log 2 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

76 How are we doing with binary search? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

77 End of lecture on 13 April 2007

78 Vector class

79 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

80 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…

81 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

82 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

83 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

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

85 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

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

87 Safety Awards safety_Awards_2006.pps safety_Awards_2006.pps

88 Miscellaneous other methods public int size() { return size; } public Object get (int which) { return array[which]; }

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

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

91 Program Demo VectorUsage.java VectorUsage.java

92 The “real” Vector class  Java provides a Vector class In java.util  It contains all of the methods shown

93 Program Demo VectorUsage.java VectorUsage.java But using java.util.Vector But using java.util.Vector

94 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

95 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

96 How are we doing with Vectors? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

97 Stuff you don’t see everyday… StuffYouDontSeeEveryDay.pps StuffYouDontSeeEveryDay.pps

98 End of lecture on 18 April 2007

99 Multi-dimensional arrays

100 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

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

102 Example  Alternative int[][] m = new int[3][4];  Produces m m[0]m[1]m[2] 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]

103 Multidimensional array visualization  A multi-dimensional array declaration (either one): int[][] m = new int[3][4];  How we visualize it: or

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

105 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

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

107 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

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

109 Fractals

110 Fractal zooming n/entry htm n/entry htm n/entry htm n/entry htm

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

112 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

113 Matrix addition  Definition C = A + B c ij = a ij + b ij c ij is sum of the elements in the same row and column of A and B

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

115 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

116 How are we doing with 2-D arrays? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

117 Driving in Bolivia DrivingInBolivia.pps DrivingInBolivia.pps

118 Wrapper classes

119 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!

120 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…

121 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

122 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?

123 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

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

125 How are we doing with Wrapper classes? 1. Very well! This stuff is easy! 2. Fairly well – with a little review, I’ll be good 3. Okay. It’s not great, but it’s not horrible, either 4. Not well. I’m kinda confused 5. Not at all. I’m soooooo lost.

126 Star Wars Episode 3 Trailer

127 Star Wars Episode 3 Trailer That was a edited version That was a edited version –I changed the PG-rated trailer to a G-rated trailer The original one can be found at The original one can be found at –Or Google for “star wars parody”

128 Yale vs. Harvard

129 Honda’s best commercial cog.mov cog.mov