1 / 12

CS100A, Fall 1997

CS100A, Fall 1997. Lecture, 6 November: More on two-dimensional arrays Declare and allocate two-dimensional array: int [ ] [ ] b; b= new int [3] [2]; Note: b.length is 3 and b[0].length is 2. Assigning to array elements could yield: b[0][0] 5

anson
Download Presentation

CS100A, Fall 1997

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS100A, Fall 1997 Lecture, 6 November: More on two-dimensional arrays Declare and allocate two-dimensional array: int [ ] [ ] b; b= new int [3] [2]; Note: b.length is 3 and b[0].length is 2. Assigning to array elements could yield: b[0][0] 5 b[0] b[0][1] 3 b[1][0] 8 b[1] b[1][1] -1 b[2][0] 7 b[2] b[2][1] -5 CS100A, Fall 1997. Lecture, 6 Nov.

  2. Declare and allocate two-dimensional array: OthelloSquare [ ] [ ] b; b= new OthelloSquare [3] [2]; Note that each array element contains null. b[0][0]= new OthelloSquare(5,6); b[0][0] b[0] b[0][1] null b[1][0] null b[1] b[1][1] null b[2][0] null b[2] b[2][1] null CS100A, Fall 1997. Lecture, 6 Nov.

  3. Example of dealing with a two-dimensional array: Magic Squares 17 24 1 8 15 each row sums to 65 23 5 7 14 16 each col sums to 65 4 6 13 20 22 each diagonal sums 10 12 19 21 3 to 65 11 18 25 2 9 16 3 2 13 In Albert Duerer’s 5 10 11 8 engraving 9 6 7 12 “Melancolia”, done 4 15 14 1 in 1514! CS100A, Fall 1997. Lecture, 6 Nov.

  4. // Assign 0 to all elements of b staticvoid zeroOut(int b[][]) { for (int r= 0; r != b.length; r= r+1) for (int c= 0; c != b[r].length; c= c+1) b[r][c]= 0; } The for loop for (i= 0; i != n; i= i+1) S; equivalent to: i= 0; while (i != n) { S; i= i+1; } CS100A, Fall 1997. Lecture, 6 Nov.

  5. Two-dimensional array: array of rows or array of columns? Entirely up to the interpretation. Java doesn’t care. Othelloboard [ ] [ ] board; board[0] is a column, board[1] is a column, etc. Because that is how the GUI interprets things. In mathematics, int [ ] [ ] b = {{1,3,5}, {2,5,4}}; usually a “matrix” of rows and columns: 1 3 5 2 5 4 Use index names r,c to help the reader: board[c][r], b[r][c] CS100A, Fall 1997. Lecture, 6 Nov.

  6. 17 24 1 8 15 each row sums to 65 23 5 7 14 16 each col sums to 65 4 6 13 20 22 each diagonal sums 10 12 19 21 3 to 65 11 18 25 2 9 Encyclopedia Britannica: The smallest possible square of odd order has, of course, side-length 3! To construct n x n magic square n x n ( n odd): 0. Put 1 in b[0][n%2] 1. If i is in b[r][c], then i+1 goes in b[r’][c’], where r’,c’ determined as follows: (a) try r’= r-1, if -1, then use r’=n-1. (b) try c’= c+1, if n, then use c’= 0. (c) if b[r’][c’] is already filled, use r’=r+1, c’= c CS100A, Fall 1997. Lecture, 6 Nov.

  7. // Store a magic square in b staticpublicvoid magicSquare(int b[][]) { int r= 0; int c= 0; int i; int size= b.length; zeroOut(b); // Make up the magic square r= 0; c= size/2; i= 1; // invariant: Array elements have already been filled with 1, ..., i-1, and b[r][c] is supposed to get i. while (b[r][c] == 0) { b[r][c]= i; i= i+1; if (b[mod(r-1, size)][mod(c+1, size)] == 0) { r= mod(r-1, size); c= mod(c+1, size); } else r= mod(r+1,size); } } CS100A, Fall 1997. Lecture, 6 Nov.

  8. Pascal’s Triangle 1 1 1 1 2 1 1 3 3 1 1 46 4 1 1 5 10 10 5 1 1 6 1520 15 6 1 int [] [] p; p= new int[7][]; // p.length is 7 p[0]= new int[1]; // p[0].length is 1 p[1]= new int[2]; // p[1].length is 2 p[2]= new int[3]; // p]2].length is 3 Elements of an array can be arrays of different lengths! CS100A, Fall 1997. Lecture, 6 Nov.

  9. Blaise Pascal (1623-1662). • Age 20, constructed arithmetical calculator to help his father in his calculations. • Elements of Geometry. • One of creators of probability and statistics. • Deeply religious (Catholic) Expected value of an event (value if the event happens) * (probability that it will happen) Lottery: $1,000,000 * 10**(-9) = $.001 Get to heaven (liberation, self-realization, moksha) because of leading spiritual life: (infinity * ? ) = CS100A, Fall 1997. Lecture, 6 Nov.

  10. // Yield Pascal's triangle with size rows staticpublicint[][] calculatePascal(int size) { int[][]p= new int[size][]; //the triangle // Invariant: rows 0..r-1 have been // allocated and calculated for (int r= 0; r != size; r= r+1) { // Allocate row i of triangle --its r+1 values p[r]= new int[r + 1]; // Calculate row r of Pascal's triangle p[r][0]= 1; for (int c= 1; c < r; c= c+1) p[r][c]= p[r-1][c-1] + p[r-1][c]; p[r][r]= 1; } return p; } CS100A, Fall 1997. Lecture, 6 Nov.

  11. // Print Pascal's triangle p, assuming that its values are less than 1000 staticpublicvoid printPascal(int p[][]) { int size= pascal.length; for (int r= 0; r != size; r= r+1) { // Add ((size-r)/2)4 + ((r+1) % 2)*2 // blanks to s String s= ""; int num; if (size%2 == 1) num= (size-r)/2; else num= (size-r-1)/2; for (int c= 0; c< num; c= c+1) s= s + " "; if (r%2 == 0) s= s + " "; // Add the numbers in row r to s for (int c= 0; c <= r; c= c+1) s= s + printbrc(p, r,c,1000); System.out.println(s); } } CS100A, Fall 1997. Lecture, 6 Nov.

  12. // Return element b[r][c] of array b as a String, // with a blank before it. // Use as many columns as is required to print x. // So, if x = 325, use 4 characters in total (one // for the initial blank). // Precondition, x < 1000 staticpublic String printbrc( int[][] b, int r, int c, int x) The program used to demonstrate in this lecture will be placed on the CS100A web page. CS100A, Fall 1997. Lecture, 6 Nov.

More Related