程序代写代做代考 Java game Two-Dimensional Arrays

Two-Dimensional Arrays
EECS1022: Programming for Mobile Computing Winter 2018
CHEN-WEI WANG
2-D Arrays: Motivating Example (2.1)
Here is a solution based on what we’ve learnt so far:
● Fix the “positions” of cities in the table as constants:
● Represent each (horizontal) row using a one-dimensional array:
● Given an itinerary {Boston, Chicago, Miami, Houston}, choose the corresponding arrays in the right order:
3 of 21
final int CHICAGO = 0; final int BOSTON = 1; final int MIAMI = 4;
int[] fromChicago = {0, 983, 787, 714, 1375, 967, 1087} int[] fromBoston = {983, 0, 214, 1102, 1763, 1723, 1842} int[] fromMiami = {1375, 1763, 1549, 661, 0, 1426, 1187}
int[] dist = fromBoston[CHICAGO] + fromChicago[MIAMI]
+ fromMiami[HUSTON];
2-D Arrays: Motivating Example (1)
Consider a table of distances between seven cities:
Chicago
Boston
New York
Atlanta
Miami
Dallas
Houston
Chicago Boston New York Atlanta Miami Dallas Houston
0
983
787
714
1375
967
1087
983
0
214
1102
1763
1723
1842
787
214
0
888
1549
1548
1627
714
1102
888
0
661
781
810
1375
1763
1549
661
0
1426
1187
967
1723
1548
781
1426
0
239
1087 1842 1627 810 1187 239 0
As part of the program for an airline reservation system, the distance of a trip with multiple stop-overs is to be calculated in order to accumulate the milage of frequent flyers.
e.g., A trip {Boston, Chicago, Miami, Houston} takes 983 (B-to-C) + 1375 (C-to-M) + 1187 (M-to-H) = 3545 miles
Question: How do you manipulate such information in Java? 2 of 21
2-D Arrays: Motivating Example (2.2)
What if cities of an itinerary are read from the user?
1 2 3 4 5 6 7 8 9
10
11
12
13
14
15
16
Scanner input = new Scanner(System.in); System.out.println(“How many cities?”);
int howMany = input.nextInt(); input.nextLine(); String[] trip = new String[howMany];
/* Read cities in the trip from the user. */ for(int i = 0; i < howMany; i ++) { System.out.println("Enter a city:"); trip[i] = input.nextLine(); } /* Add up source-to-destination distances. */ int dist = 0; for(inti=0;i< howMany-1;i++){ String src = trip[i]; String dst = trip[i + 1]; /* How to accumulate the distance between src and dst? */ } 4 of 21 2-D Arrays: Motivating Example (2.3) Given a source and a destination, we need to explicitly select: ● The corresponding 13● The corresponding 14 15 16 17 18 19 20 21 22 23 24 25 ● Drawback? 5 of 21 [e.g., fromBoston] [e.g., CHICAGO] source row destination index String src = trip[i]; String dst = trip[i + 1]; if(src.equals("Chicago")) { if(dst.equals("Boston")) {dist += fromChicago[BOSTON];} else if(dst.equals("New York")) {dist += fromChicago[NY];} ... } else if(src.equals("Boston")) { if(dst.equals("Chicago")) {dist += fromBoston[CHICAGO];} else if(dst.equals("NEW YORK")) {dist += fromBoston[NY];} ... } ... 7×(7−1)possibilitiestoprogram! Declaring, Creating, and Initializing Using 2-D Arrays: Initialization (1) Shorthand Notations You use an array initializer to declare, create and A may be initialized either at the time of declaration, initialize a two-dimensional array. For example, or after declaration. 7 of 21 Liang, Introduction to Java Programming, Tenth Edition, Global Edition. © Pearson Education Limited 2015 8 can also 2D array int[][] array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} }; Same as int[][] array = new int[4][3]; array[0][0] = 1; array[0][1] = 2; array[0][2] = 3; array[1][0] = 4; array[1][1] = 5; array[1][2] = 6; array[2][0] = 7; array[2][1] = 8; array[2][2] = 9; array[3][0] = 10; array[3][1] = 11; array[3][2] = 12; 2-D Arrays: Initialization (1) A 2D array is really an array of arrays 6 of 21 2-D Arrays: Lengths (1) For a 2D array , you may query about its size, or sizes of its component arrays. 8 of 21 2-D Arrays: Lengths (2) e.g., For a 2D array , its components may have different sizes. 9 of 21 Ragged Arrays, cont. Revisiting the Motivating Example final int CHICAGO = 0; final int BOSTON = 1; ... final int HOUSTON = 6; int MiamiToBoston = distances[MIAMI][BOSTON]; int BostonToNewYork = distances[BOSTON][NEWYORK]; int MiamiToNewYork = MiamiToBoston + BostonToNewYork; 11 of 21 Liang, Introduction to Java Programming, Tenth Edition, Global Edition. © Pearson Education Limited 2015 12 2-D Arrays: Assignments For a 2D array , access a slot via its row and column. e.g., 10 of 21 Two Dimensional Arrays: Example (1) Problem: Given a 2D array a of integers, print out all its values: first row, second row, third row, and so on. 1 2 3 4 5 6 for(int row = 0; row < ; row ++) { System.out.print("Row" + row); for(int col = 0; col < a[row].length ; col ++) { System.out.print(a[row][col]); } System.out.println(); } 12 of 21 a.length ○ In L1, we write a.length so that it will print out exactly that many rows in the matrix. ○ In L3, we write a[row].length so that it will print out according to how large the row a[row] is. Two Dimensional Arrays: Example (2) Problem: Given a 2D array a of integers, calculate the average of its values. int total = 0; int numOfElements = 0; for(int row = 0; row < a.length; row ++) { for(int col = 0; col < a[row].length; col ++) { total += a[row][col]; numOfElements ++; } } double average = ((double) total) / numOfElements; System.out.println("Average is " + average); ● Why is the numOfElements counter necessary? ● Divide total by a.length * a[0].length instead? 13 of 21 Two Dimensional Arrays: Example (4.1) Problem: Given a 2D array a of integers, find out the row which has the maximum sum. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 of 21 int maxRow = ; int maxSum = 0; for(int col=0; col < a[0].length; col ++){maxSum += a[ 0 ][col];} for(int row = 1 ; row < a.length; row ++) { int sum = 0; for(int col = 0; col < a[row].length; col ++) { sum += a[row][col]; } if (sum > maxSum) { maxRow = row; maxSum = sum;
} }
System.out.print(“Row at index ” + maxRow); System.out.println(” has the maximum sum ” + maxSum);
0
Q: What if statement
the for-loop, between L2 and L3?
at L4 is moved, outside
int sum = 0;
Two Dimensional Arrays: Example (3)
Problem: Given a 2D array a of integers, find out its maximum and minimum values.
int max = a[0][0];
int min = a[0][0];
for(int row = 0; row < a.length; row ++) { for(int col = 0; col < a[row].length; col ++) { if (a[row][col] > max) {
max = a[row][col]; }
if (a[row][col] < min) { min = a[row][col]; } } } System.out.println("Maximum is " + max); System.out.println("Minimum is " + min); 14 of 21 Two Dimensional Arrays: Example (5) Problem: Given a 2D array a of integers, determine if all elements are positive. Alternatively (with early exit): boolean allPos = true; for(int row = 0; row < a.length; row ++) { for(int col = 0; col < a[row].length; col ++) { allPos = allPos && a[row][col] > 0;
}}
if (allPos) { /* print */ } else { /* print */ }
boolean allPos = true;
for(int row = 0; allPos row < a.length; row ++) { for(int col = 0; allPos col < a[row].length; col ++) { allPos = a[row][col] > 0;
}}
if (allPos) { /* print */ } else { /* print */ }
16 of 21
&&
&&

Two Dimensional Arrays: Example (6.1)
Problem: Given a 2D array a of integers, determine if it is a rectangle (i.e., each row has the same number of columns).
if(a.length == 0) { /* empty array can’t be a rectangle */ } else { /* a.length > 0 */
int assumedLength = a[0].length;
boolean isRectangle = true;
for(int row = 0; row < a.length; row ++) { isRectangle = isRectangle && a[row].length == assumedLength; } if (isRectangle) { /* print */ } else { /* print */ } } Exercise: Change the above code so that it exits from the loop as soon as it is found that the 2-D array is not a rectangle. 17 of 21 Two Dimensional Arrays: Example (7) ● Problem: Given a 2D array a of integers, print out the lower-left triangular area of elements. Assumption: The input 2D array is of a square shape. ● Problem: upper-left triangular area? Exercises: upper-right triangle? lower-right triangle? 19 of 21 for(int row = 0; row < ; row ++) { for(int col = 0; col ; col ++) { System.out.print(a[row][col]); } System.out.println(); } a.length <= row for(int row = 0; row < ; row ++) { for(int col = 0; col System.out.print(a[row][col]); } System.out.println(); } ; col ++) { a.length < a[row].length - row Two Dimensional Arrays: Example (6.2) Problem: Given a 2D array a of integers, determine if it is a square (i.e., each row has the same number of columns, and that number is equal to the number of rows of the 2-D array). if(a.length == 0) { /* empty array can’t be a square */ } else { /* a.length > 0 */
int assumedLength = a.length;
boolean isSquare = a[0].length == assumedLength ; for(int row = 0; row < a.length; row ++) { isSquare = isSquare && a[row].length == assumedLength; } if (isSquare) { /* print */ } else { /* print */ } } Exercise: Change the above code so that it exits from the loop as soon as it is found that the 2-D array is not a square. 18 of 21 2-D Arrays: Example (8) Consider the tic-tac-toe game: 20 of 21 Index (1) Motivating Example (1) Motivating Example (2.1) Motivating Example (2.2) Motivating Example (2.3) Initialization (1) Initialization (1) 2-D Arrays: 2-D Arrays: 2-D Arrays: 2-D Arrays: 2-D Arrays: 2-D Arrays: 2-D Arrays: 2-D Arrays: 2-D Arrays: Revisiting the Motivating Example Two Dimensional Arrays: Example (1) Two Dimensional Arrays: Example (2) Two Dimensional Arrays: Example (3) Lengths (1) Lengths (2) Assignments Two Dimensional Arrays: Example (4.1) 21 of 21 Index (2) Two Dimensional Arrays: Example (5) Two Dimensional Arrays: Example (6.1) Two Dimensional Arrays: Example (6.2) Two Dimensional Arrays: Example (7) 2-D Arrays: Example (8) 22 of 21