1 Arrays of Arrays An array can represent a collection of any type of object - including other arrays! The world is filled with examples Monthly magazine:

Slides:



Advertisements
Similar presentations
AITI Lecture 19 Linked List Adapted from MIT Course 1.00 Spring 2003 Lecture 26 and Tutorial Note 9 (Teachers: Please do not erase the above note)
Advertisements

EXAMPLES (Arrays). Example Many engineering and scientific applications represent data as a 2-dimensional grid of values; say brightness of pixels in.
CS0007: Introduction to Computer Programming Arrays: Higher Dimensional Arrays.
RAPTOR Syntax and Semantics By Lt Col Schorsch
Introduction to Computing Science and Programming I
Programming with Alice Computing Institute for K-12 Teachers Summer 2011 Workshop.
Tutorial 4: Designing a Web Page with Tables
Arrays. Topics Tables of Data Arrays – Single Dimensional Parsing a String into Multiple Tokens Arrays - Multi-dimensional.
CSE 1301 Lecture 6B More Repetition Figures from Lewis, “C# Software Solutions”, Addison Wesley Briana B. Morrison.
Computer Science 1620 Multi-Dimensional Arrays. we used arrays to store a set of data of the same type e.g. store the assignment grades for a particular.
Liang, Introduction to Programming with C++, Second Edition, (c) 2010 Pearson Education, Inc. All rights reserved Chapter 8 Multidimensional.
CS102--Object Oriented Programming Lecture 6: – The Arrays class – Multi-dimensional arrays Copyright © 2008 Xiaoyan Li.
R-1 University of Washington Computer Programming I Lecture 17: Multidimensional Arrays © 2000 UW CSE.
The Power of Tables They aren't just for sitting stuff on anymore...
Lecture 5 of Computer Science II Arrays Instructor: Mr.Ahmed Al Astal.
CS 106 Introduction to Computer Science I 10 / 16 / 2006 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 03 / 17 / 2008 Instructor: Michael Eckmann.
College Algebra Fifth Edition James Stewart Lothar Redlin Saleem Watson.
Matrices Write and Augmented Matrix of a system of Linear Equations Write the system from the augmented matrix Solve Systems of Linear Equations using.
Java Unit 9: Arrays Declaring and Processing Arrays.
Data Structures Using C++ 2E Chapter 6 Recursion.
Row rows A matrix is a rectangular array of numbers. We subscript entries to tell their location in the array Matrices are identified by their size.
Data Structures Using C++ 2E Chapter 6 Recursion.
TOPIC 7 MODIFYING PIXELS IN A MATRIX NESTED FOR LOOPS 1 Notes adapted from Introduction to Computing and Programming with Java: A Multimedia Approach by.
Announcements.
Chapter 7 Arrays. © 2004 Pearson Addison-Wesley. All rights reserved11-2 Arrays Arrays are objects that help us organize large amounts of information.
Chapter 4 Matrices By: Matt Raimondi.
Two dimensional arrays in Java Computer Science 3 Gerb Objective: Use matrices in Java.
The while Loop Syntax while (condition) { statements } As long condition is true, the statements in the while loop execute.
Two Dimensional Arrays
CHAPTER: 12. Array is a collection of variables of the same data type that are referenced by a common name. An Array of 10 Elements of type double.
Announcements This Wednesday, Class and Labs are cancelled! The last lab is due this Wednesday … how many people are planning on doing it? Finally posted.
© Copyright 2013 by Pearson Education, Inc. All Rights Reserved. 1 Chapter 8 Multidimensional Arrays.
M180: Data Structures & Algorithms in Java Arrays in Java Arab Open University 1.
Two Dimensional Arrays. Two-dimensional Arrays Declaration: int matrix[4][11]; 4 x 11 rows columns
More on Logic Today we look at the for loop and then put all of this together to look at some more complex forms of logic that a program will need The.
CS161 Topic #16 1 Today in CS161 Lecture #16 Prepare for the Final Reviewing all Topics this term Variables If Statements Loops (do while, while, for)
ITI 1120 Lab #9 Slides by: Diana Inkpen and Alan Williams.
Two-Dimensional Arrays That’s 2-D Arrays Girls & Boys! One-Dimensional Arrays on Steroids!
ITI 1120 Lab #5 Contributors: S. Boyd, R. Plesa, A. Felty, D. Inkpen, A. Williams, D. Amyot.
Conditionals-part21 Conditionals – part 2 Barb Ericson Georgia Institute of Technology Nov 2009.
Chapter 8: Arrays Copyright © 2008 W. W. Norton & Company. All rights reserved. 1 Chapter 8 Arrays.
1 Recursion Recursion is a powerful programming technique that provides elegant solutions to certain problems. Chapter 11 focuses on explaining the underlying.
Arrays. The array data structure Array is a collection of elements, that have the same data type Integers (int) Floating point numbers (float, double)
XP 1 ﴀ New Perspectives on Microsoft Office 2003, Premium Edition Excel Tutorial 2 Microsoft Office Excel 2003 Tutorial 2 – Working With Formulas and Functions.
Chapter 6Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 6 l Array Basics l Arrays in Classes and Methods l Programming.
T U T O R I A L  2009 Pearson Education, Inc. All rights reserved Student Grades Application Introducing Two-Dimensional Arrays and RadioButton.
Data Structures Arrays and Lists Part 2 More List Operations.
Arrays What is an array… –A data structure that holds a set of homogenous elements (of the same type) –Associate a set of numbers with a single variable.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 4-1 Lecture Objectives To understand: –what values can be stored in a Boolean.
Copyright © 2013 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Programming Logic & Design Third Edition by Tony Gaddis.
Chapter 9 Introduction to Arrays Fundamentals of Java.
LESSON 8: INTRODUCTION TO ARRAYS. Lesson 8: Introduction To Arrays Objectives: Write programs that handle collections of similar items. Declare array.
Lecture 18: Nested Loops and Two-Dimensional Arrays
Lecture 5 of Computer Science II
Matrices Rules & Operations.
EGR 2261 Unit 10 Two-dimensional Arrays
1.5 Matricies.
Two Dimensional Arrays and Complex Conditions
Lecture 07 More Repetition Richard Gesick.
Java Software Structures: John Lewis & Joseph Chase
Arrays … The Sequel Applications and Extensions
Chapter 12 Recursion (methods calling themselves)
Nested Loop Review and Two-Dimensional Arrays
Georgia Institute of Technology
Lecture 13: Two-Dimensional Arrays
CIS16 Application Development and Programming using Visual Basic.net
Presentation transcript:

1 Arrays of Arrays An array can represent a collection of any type of object - including other arrays! The world is filled with examples Monthly magazine: we number –the monthly editions –pages with in each Calendars: we number –the months –days in each month

2 General Two-Dimensional Arrays Say we want to develop an annual calendar manager Representing the Data A month is an array of strings that represent daily events A year is a 12- element array of months.

3 Declaring an Array of Arrays A month is an array of daily event Strings A year is an array of months So a year is an array of String arrays private String[ ] [ ] dailyEvent;

4 Creating an Array of Arrays Array declaration introduces a name, but does not create an array Proceed in two steps 1.Construct 12- element year 2.Construct each individual month array

5 1.Construct 12- element year dailyEvent = new String[12] [ ]

6 1.m 2.Construct months for (int month = 0; month < 12; month++) { int numDays = getDays( month+1 ); dailyEvent[month] = new String[numDays]; } Assume getDays is a private method that returns the number of days in a month

7

8 Indexing an Array of Arrays Say a user enters the information 1/28- Spring semester starts The month is 1 The day is 28 The event is “Spring semester starts” Since array indexing begins at 0, dailyEvent[0][27] = “Spring semester starts”;

9

10 Setting and Getting Array Values // Set the event description for a given month and day public void setEvent( int month, int day, String description ) { dailyEvent[month-1][day-1] = description; } // Returns the event associated with a given date public String getEvent( int month, int day ) { return dailyEvent[month-1][day-1]; }

11 Arrays of Arrays are two dimensional When you think of an array of arrays in this way, it is natural to think of indices as specifying row and column someArray[rowNum][colNum]

12 Traversing a 2-D Array Often want to do something with every element in an array- Use for loops! Ex. Initialize all calendar entries to “No event today” –to initialize all calendar entries for a single month: for ( int day = 0; day < dailyEvent[month].length; day++) { dailyEvent[month][day] = “No event today”; } –to initialize all 12 months // Fill all entries in each month with “No event today” for (int month = 0; month < 12; month++) { // Fill all entries for one month with “No event today”... }

13 Putting it all Together // Fill all entries in each month with “No event today” for (int month = 0; month < 12; month++) { // Fill all entries for one month with “No event today” for (int day = 0; day < dailyEvent[month].length; day++) { dailyEvent[month][day] = “No event today”; }

14 General Structure of Nested for Loops for 2- D Arrays for (row = 0; row < myArray.length; row++) { for (col = 0; col < myArray[row].length; col++) { // Do something with array element myArray[row][col]... }

15 Beyond Two Dimensions so far our yearly calendar is quite limited might want a day’s entries to include –daily events –hourly events

16 A CalendarDay Class Two arrays full- day events hourly events private String[ ] fullDayEvent; private String[ ] hourlyEvent; A year is then just an array of months, each of which is an array of CalendarDay, each of which is two arrays

17 YearlyCalendar.rtf CalendarDay.rtf

18 Exercises: Add the Following to CalendarDay // Clear all event entries for this day // All event entries are set to “–––” public void clearDay() // Return the event for a specific hour on this day public String getHourlyEvent( int time ) // Print all hourly events; // Each hourly event on a separate line in the form // hour: 00 event public void printHourlyEvents() // Print all full day events public void printFullDayEvents() // Print all events for this day public void printDay()

19 Matrices two dimensional arrays with rows of same length Ex. magnified region of pixels from an image Each pixel can be described by row and column position, as well as color value

20 More examples chessboards sliding block puzzles

21 Magic Square a matrix in which the sums of rows, columns, and diagonals are all equal

22 Declaring and Constructing a Matrix Matrices are simply 2-D arrays, so a matrix is declared in the same way private int[ ][ ] magicSquare; Matrix must be constucted before it is filled magicSquare = new int[SIZE][SIZE]; n- row, m- column matrix constructed as follows rectangularArray = new type[n][m];

23 Traversing a Matrix Ex. Determine whether a square matrix is a magic square Row, column, and diagonal sums must be equal. Start by finding target sum // Compute sum of elements in row 0 int targetSum = 0; for (int col = 0; col < SIZE; col++) { targetSum = targetSum + magicSquare[0][col]; }

24 Row by Row Traversal check sum of each row use nested for loops! // Assume we have a magic square unless a sum is incorrect boolean isMagicSquare = true; for (int row = 1; row < SIZE; row++) { // Check sum of each row int sum = 0; for (col = 0; col < SIZE; col++) { sum = sum + magicSquare[row][col]; } if (sum !=targetSum) { isMagicSquare = false; }

25 A More Efficient Version If any row’s sum does not match target, can stop right away // Assume we have a magic square unless a sum is incorect boolean isMagicSquare = true; for (int row = 1; row < SIZE && isMagicSquare; row++) { // Check sum of each row int sum = 0; for (col = 0; col < SIZE; col++) { sum = sum + magicSquare[row][col]; } if (sum !=targetSum) [ isMagicSquare = false; }

26 Column by Column nested loops again reverse order of nesting –outer loop through columns –inner loop through rows // Assume we have a magic square unless a sum is incorrect boolean isMagicSquare = true; for (int col =0; col < SIZE && isMagicSquare; col++) { // Check sum of each column int sum = 0; for (row = 0; row < SIZE; row++) { sum = sum + magicSquare[row][col]; } isMagicSquare = (sum == targetSum); }

27 Diagonal Traversal two diagonals- two loops no nested loops this time //Check sum of major diagonal int sum = 0; for (int element = 0; element < SIZE; element++) { sum = sum + magicSquare[element][element]; } isMagicSquare = (sum == targetSum);

28 Minor Diagonal a bit more tricky to get indices right for a 4x4 matrix: –[0][3], [1][2], [2][1], [3][0] –if loop var is row (over 0,1,2,3), associated column is (SIZE-1)-row // Check sum of minor diagonal int sum = 0; for (int row = 0; row < SIZE; row++) { sum = sum + magicSquare[row][SIZE-1-row]; } isMagicSquare = (sum == targetSum);

29 Array Indexing Now let’s fill a magic square Through this we’ll explore more complex ways to “walk through” matrices

30 Filling a Magic Square For an n-by-n matrix, if n is odd, a simple algorithm will fill it appropriately place a 1 in the center of the bottom row. Then fill in the remainder of the square by following these rules: Try to place the next integer (one greater than the last one you placed) in the cell one slot below and to the right of the last one placed. If you fall off the bottom of the array, go to the top row of the same column. If you fall off the right edge of the array, go to the leftmost column. If that cell is empty, write the next integer there and continue. If the cell is full, go back to where you wrote the last integer and write the next one in the cell directly above it.

31 1

32 2 1

40 Initializing Matrix Entries to a Value Begin by initializing each cell in a matrix to 0 // Initialize all entries in the square to 0 for (int row = 0; row < SIZE; row++) { for (int col = 0; col < SIZE; col++) { magicSquare[row][col] = 0; }

41 Filling the Magic Square Declare and initialize variables to keep track of current row and column int currRow = SIZE-1; int currCol = SIZE/2; Assuming SIZE is odd!

42 Follow the Rules will follow the rules for filling a magic square apply to the rules until the square is filled (SIZExSIZE times) for (int nextInt = 1; nextInt <= SIZE*SIZE; nextInt++) { // fill a cell }

43 In the Loop Fill the current cell magicSquare[currRow][currCol] = nextInt; Find the next cell to fill

44 Finding the Next Cell Move down and to the right int nextCol = currCol + 1; int nextRow = currRow + 1; Might “fall off” the matrix! Need to wrap around int nextCol = (currCol + 1) % SIZE; int nextRow = (currRow + 1) % SIZE;

45 Adjusting if a Cell is Full If a cell is already filled, go back to previous cell and move up if (magicSquare[nextRow][nextCol] == 0) { // Use the cell if it is available currRow = nextRow; currCol = nextCol; } else { // Move up one cell otherwise currRow = (currRow SIZE) % SIZE; }

46 Putting it all Together Figure 15.5 (A method to fill a magic square)

47 More Practice with Matrices: Digital Image Smoothing A digital photo is a matrix of pixel values Noise and other artifacts sometimes appear can smooth an image to eliminate (or decrease) some of these artifacts

48 A Simple Smoothing Algorithm Assume image is black and white –pixel values are ints giving brightness levels private int[ ][ ] brightness; Implement smoothing by averaging –replace each pixel value with the average of its neighbors

49 Design of Smoothing Algorithm Assume constants WIDTH and HEIGHT give image width and height in pixels Declare a matrix for the averaged (smoothed) image private int[ ][ ] avgBrightness; Traverse row by row for (int row = 1; row < HEIGHT-1; row++) { for (int col = 1; col < WIDTH-1; col++) // replace brightness value by average value... }

50 Calculating Average Brightness Consider a 3-by-3 square centered at the pixel to be replaced by an average // Calculate average brightness at position specified by row and col; // position is not on an edge of the image. int totalBrightness = 0; for (int r = -1; r <= 1; r++) { for (int c = -1; c <= 1; c++) { totalBrightness = totalBrightness + brightness[row+r][col+c]; } avgBrightness[row][col] = totalBrightness/9; }

51 Pixels on the Edge What about pixels on the edges of an image? –pixels on top edge have no neighbors above them; only to the sides and below. –pixels on bottom have no neighbors below them; only to the sides and above. –pixels in the corners have even fewer neighbors.

52 // Calculate average brightness at position specified by row and col; // position is top edge of the image, not in a corner int totalBrightness = 0; for (int r = 0; r <=1; r++) { for (int c = -1; c <= 1; c++) { totalBrightness = totalBrightness + brightness[row+r][col+c]; } avgBrightness[row][col] = totalBrightness/6; } Handling the Top Edge

53 Handling the Bottom Edge // Calculate average brightness at position specified by row and col; // position is bottom edge of the image, not in a corner int totalBrightness = 0 for (int r = -1; r <= 0; r++) { for (int c = -1; c <= 1; c++) { totalBrightness = totalBrightness + brightness[row+r][col+c]; } avgBrightness[row][col] = totalBrightness/6; }

54 Generalizing Similar loops to handle –left border –right border –corners Difference is how many neighbors are found above, below, to the right, and to the left // calculate average brightness at position specified by // row and col; distLeft, distRight, distUp, and DistDown // specify the neighborhood to be averaged. private int adjustPixel( int row, int col, int distLeft, int distRight, int distUp, int distDown ) { int totalBrightness = 0; int neighbors = 0; for (int r = distUp; r <= distDown; r++) { for (int c = distLeft; c <= distRight; c++) { totalBrightnesss = totalBrightness + brightness[row+r][col+c]; neighbors++; } return totalBrightness/neighbors; }