CSC 245 Chapter 9, Spring 2013

Lebanese American University · Objects and Data Abstraction · 76 pages · Dr. Azzam Mourad

All CSC 245 files
CSC 245 Chapter 9, Spring 2013, page 1

Stuck on a question? A tutor can walk you through it.

CSC 245 Chapter 9, Spring 2013, page 2 CSC 245 Chapter 9, Spring 2013, page 3 CSC 245 Chapter 9, Spring 2013, page 4 CSC 245 Chapter 9, Spring 2013, page 5 CSC 245 Chapter 9, Spring 2013, page 6 CSC 245 Chapter 9, Spring 2013, page 7 CSC 245 Chapter 9, Spring 2013, page 8 CSC 245 Chapter 9, Spring 2013, page 9 CSC 245 Chapter 9, Spring 2013, page 10

Showing the first 10 of 76 pages. Download the PDF to see all of it.

More CSC 245 files

Show the text of this chapter
 1992-2007 Pearson Education, Inc. All rights reserved. Azzam Mourad 1 99 Review - Arrays  1992-2007 Pearson Education, Inc. All rights reserved. 2 OBJECTIVES In this chapter you will learn:  What arrays are.  To use arrays to store data in and retrieve data from lists and tables of values.  To declare an array, initialize an array and refer to individual elements of an array.  To use the enhanced for statement to iterate through arrays.  To pass arrays to methods.  To declare and manipulate multidimensional arrays.  To write methods that use variable-length argument lists.  To read command-line arguments into a program. Azzam Mourad 3 7.1 Introduction 7.2 Arrays 7.3 Declaring and Creating Arrays 7.4 Examples Using Arrays 7.5 Case Study: Card Shuffling and Dealing Simulation 7.6 Enhanced for Statement 7.7 Passing Arrays to Methods 7.8 Case Study: Class GradeBook Using an Array to Store Grades 7.9 Multidimensional Arrays 7.10 Case Study: Class GradeBook Using a Two-Dimensional Array 7.11 Variable-Length Argument Lists 7.12 Using Command-Line Arguments 7.14 (Optional) Software Engineering Case Study: Collaboration Among Objects Azzam Mourad 4 7.1 Introduction • Arrays – Data structures – Related data items of same type – Remain same size once created • Fixed-length entries Azzam Mourad 5 7.2 Arrays • Array – Group of variables • Have same type – Reference type Azzam Mourad 6 Fig. 7.1 | A 12-element array. Azzam Mourad 7 7.2 Arrays (Cont.) • Index – Also called subscript – Position number in square brackets – Must be positive integer or integer expression – First element has index zero a = 5; b = 6; c[ a + b ] += 2; • Adds 2 to c[ 11 ] Azzam Mourad 8 Common Programming Error 7.1 Using a value of type long as an array index results in a compilation error. An index must be an int value or a value of a type that can be promoted to int—namely, byte, short or char, but not long. Azzam Mourad 9 7.2 Arrays (Cont.) • Examine array c – c is the array name – c.length accesses array c’s length – c has 12 elements ( c[0], c[1], … c[11] ) • The value of c[0] is –45 Azzam Mourad 10 7.3 Declaring and Creating Arrays • Declaring and Creating arrays – Arrays are objects that occupy memory – Created dynamically with keyword new int c[] = new int[ 12 ]; – Equivalent to int c[]; // declare array variable c = new int[ 12 ]; // create array • We can create arrays of objects too String b[] = new String[ 100 ]; Azzam Mourad 11 Common Programming Error 7.2 In an array declaration, specifying the number of elements in the square brackets of the declaration (e.g., int c[ 12 ];) is a syntax error. Azzam Mourad 12 Good Programming Practice 7.1 For readability, declare only one variable per declaration. Keep each declaration on a separate line, and include a comment describing the variable being declared. Azzam Mourad 13 Common Programming Error 7.3 Declaring multiple array variables in a single declaration can lead to subtle errors. Consider the declaration int[] a, b, c;. If a, b and c should be declared as array variables, then this declaration is correct—placing square brackets directly following the type indicates that all the identifiers in the declaration are array variables. However, if only a is intended to be an array variable, and b and c are intended to be individual int variables, then this declaration is incorrect—the declaration int a[], b, c; would achieve the desired result. Azzam Mourad 14 7.4 Examples Using Arrays • Declaring arrays • Creating arrays • Initializing arrays • Manipulating array elements Azzam Mourad 15 7.4 Examples Using Arrays • Creating and initializing an array – Declare array – Create array – Initialize array elements Azzam Mourad 16 Outline InitArray.java Line 8 Declare array as an array of ints Line 10 Create 10 ints for array; each int is initialized to 0 by default Line 15 array.length returns length of array Line 16 array[counter] returns int associated with index in array Program output 1 // Fig. 7.2: InitArray.java 2 // Creating an array. 3 4 public class InitArray 5 { 6 public static void main( String args[] ) 7 { 8 int array[]; // declare array named array 9 10 array = new int[ 10 ]; // create the space for array 11 12 System.out.printf( "%s%8s\n", "Index", "Value" ); // column headings 13 14 // output each array element's value 15 for ( int counter = 0; counter < array.length; counter++ ) 16 System.out.printf( "%5d%8d\n", counter, array[ counter ] ); 17 } // end main 18 } // end class InitArray Index Value 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 Declare array as an array of ints Create 10 ints for array; each int is initialized to 0 by default array.length returns length of array array[counter] returns int associated with index in array Each int is initialized to 0 by default Azzam Mourad 17 7.4 Examples Using Arrays (Cont.) • Using an array initializer – Use initializer list • Items enclosed in braces ({}) • Items in list separated by commas int n[] = { 10, 20, 30, 40, 50 }; – Creates a five-element array – Index values of 0, 1, 2, 3, 4 – Do not need keyword new Azzam Mourad 18 Outline InitArray.java Line 9 Declare array as an array of ints Line 9 Compiler uses initializer list to allocate array Program output 1 // Fig. 7.3: InitArray.java 2 // Initializing the elements of an array with an array initializer. 3 4 public class InitArray 5 { 6 public static void main( String args[] ) 7 { 8 // initializer list specifies the value for each element 9 int array[] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 }; 10 11 System.out.printf( "%s%8s\n", "Index", "Value" ); // column headings 12 13 // output each array element's value 14 for ( int counter = 0; counter < array.length; counter++ ) 15 System.out.printf( "%5d%8d\n", counter, array[ counter ] ); 16 } // end main 17 } // end class InitArray Index Value 0 32 1 27 2 64 3 18 4 95 5 14 6 90 7 70 8 60 9 37 Declare array as an array of ints Compiler uses initializer list to allocate array Azzam Mourad 19 7.4 Examples Using Arrays (Cont.) • Calculating a value to store in each array element – Initialize elements of 10-element array to even integers Azzam Mourad 20 Outline InitArray.java Line 8 Declare constant variable Line 9 Declare and create array that contains 10 ints Line 13 Use array index to assign array Program output 1 // Fig. 7.4: InitArray.java 2 // Calculating values to be placed into elements of an array. 3 4 public class InitArray 5 { 6 public static void main( String args[] ) 7 { 8 final int ARRAY_LENGTH = 10; // declare constant 9 int array[] = new int[ ARRAY_LENGTH ]; // create array 10 11 // calculate value for each array element 12 for ( int counter = 0; counter < array.length; counter++ ) 13 array[ counter ] = 2 + 2 * counter; 14 15 System.out.printf( "%s%8s\n", "Index", "Value" ); // column headings 16 17 // output each array element's value 18 for ( int counter = 0; counter < array.length; counter++ ) 19 System.out.printf( "%5d%8d\n", counter, array[ counter ] ); 20 } // end main 21 } // end class InitArray Index Value 0 2 1 4 2 6 3 8 4 10 5 12 6 14 7 16 8 18 9 20 Declare constant variable ARRAY_LENGTH using the final modifier Declare and create array that contains 10 ints Use array index to assign array value Azzam Mourad 21 Good Programming Practice 7.2 Constant variables also are called named constants or read-only variables. Such variables often make programs more readable than programs that use literal values (e.g., 10)—a named constant such as ARRAY_LENGTH clearly indicates its purpose, whereas a literal value could have different meanings based on the context in which it is used. Azzam Mourad 22 Common Programming Error 7.4 Assigning a value to a constant after the variable has been initialized is a compilation error. Azzam Mourad 23 Common Programming Error 7.5 Attempting to use a constant before it is initialized is a compilation error. Azzam Mourad 24 7.4 Examples Using Arrays (Cont.) • Summing the elements of an array – Array elements can represent a series of values • We can sum these values Azzam Mourad 25 Outline SumArray.java Line 8 Declare array with initializer list Lines 12-13 Sum all array values Program output 1 // Fig. 7.5: SumArray.java 2 // Computing the sum of the elements of an array. 3 4 public class SumArray 5 { 6 public static void main( String args[] ) 7 { 8 int array[] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 }; 9 int total = 0; 10 11 // add each element's value to total 12 for ( int counter = 0; counter < array.length; counter++ ) 13 total += array[ counter ]; 14 15 System.out.printf( "Total of array elements: %d\n", total ); 16 } // end main 17 } // end class SumArray Total of array elements: 849 Declare array with initializer list Sum all array values Azzam Mourad 26 7.4 Examples Using Arrays (Cont.) • Using bar charts to display array data graphically – Present data in graphical manner • E.g., bar chart – Examine the distribution of grades Azzam Mourad 27 Outline BarChart.java (1 of 2) Line 8 Declare array with initializer list Line 19 Use the 0 flag to display one- digit grade with a leading 0 Lines 23-24 For each array element, print associated number of asterisks 1 // Fig. 7.6: BarChart.java 2 // Bar chart printing program. 3 4 public class BarChart 5 { 6 public static void main( String args[] ) 7 { 8 int array[] = { 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1 }; 9 10 System.out.println( "Grade distribution:" ); 11 12 // for each array element, output a bar of the chart 13 for ( int counter = 0; counter < array.length; counter++ ) 14 { 15 // output bar label ( "00-09: ", ..., "90-99: ", "100: " ) 16 if ( counter == 10 ) 17 System.out.printf( "%5d: ", 100 ); 18 else 19 System.out.printf( "%02d-%02d: ", 20 counter * 10, counter * 10 + 9 ); 21 22 // print bar of asterisks 23 for ( int stars = 0; stars < array[ counter ]; stars++ ) 24 System.out.print( "*" ); 25 26 System.out.println(); // start a new line of output 27 } // end outer for 28 } // end main 29 } // end class BarChart Declare array with initializer list For each array element, print associated number of asterisks Use the 0 flag to display one- digit grade with a leading 0 Azzam Mourad 28 Outline BarChart.java (2 of 2) Program output Grade distribution: 00-09: 10-19: 20-29: 30-39: 40-49: 50-59: 60-69: * 70-79: ** 80-89: **** 90-99: ** 100: * Azzam Mourad 29 7.4 Examples Using Arrays (Cont.) • Using the elements of an array as counters – Use a series of counter variables to summarize data Azzam Mourad 30 Outline RollDie.java Line 10 Declare frequency as array of 7 ints Lines 13-14 Generate 6000 random integers in range 1-6 Line 14 Increment frequency values at index associated with random number Program output 1 // Fig. 7.7: RollDie.java 2 // Roll a six-sided die 6000 times. 3 import java.util.Random; 4 5 public class RollDie 6 { 7 public static void main( String args[] ) 8 { 9 Random randomNumbers = new Random(); // random number generator 10 int frequency[] = new int[ 7 ]; // array of frequency counters 11 12 // roll die 6000 times; use die value as frequency index 13 for ( int roll = 1; roll <= 6000; roll++ ) 14 ++frequency[ 1 + randomNumbers.nextInt( 6 ) ]; 15 16 System.out.printf( "%s%10s\n", "Face", "Frequency" ); 17 18 // output each array element's value 19 for ( int face = 1; face < frequency.length; face++ ) 20 System.out.printf( "%4d%10d\n", face, frequency[ face ] ); 21 } // end main 22 } // end class RollDie Face Frequency 1 988 2 963 3 1018 4 1041 5 978 6 1012 Declare frequency as array of 7 ints Generate 6000 random integers in range 1-6 Increment frequency values at index associated with random number Azzam Mourad 31 7.4 Examples Using Arrays (Cont.) • Using arrays to analyze survey results – 40 students rate the quality of food • 1-10 Rating scale: 1 means awful, 10 means excellent – Place 40 responses in array of integers – Summarize results Azzam Mourad 32 Outline StudentPoll.java (1 of 2) Lines 9-11 Declare responses as array to store 40 responses Line 12 Declare frequency as array of 11 int and ignore the first element Lines 16-17 For each response, increment frequency values at index associated with that response 1 // Fig. 7.8: StudentPoll.java 2 // Poll analysis program. 3 4 public class StudentPoll 5 { 6 public static void main( String args[] ) 7 { 8 // array of survey responses 9 int responses[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 11 4, 8, 6, 8, 10 }; 12 int frequency[] = new int[ 11 ]; // array of frequency counters 13 14 // for each answer, select responses element and use that value 15 // as frequency index to determine element to increment 16 for ( int answer = 0; answer < responses.length; answer++ ) 17 ++frequency[ responses[ answer ] ]; 18 19 System.out.printf( "%s%10s", "Rating", "Frequency" ); 20 21 // output each array element's value 22 for ( int rating = 1; rating < frequency.length; rating++ ) 23 System.out.printf( "%d%10d", rating, frequency[ rating ] ); 24 } // end main 25 } // end class StudentPoll Declare responses as array to store 40 responses Declare frequency as array of 11 int and ignore the first element For each response, increment frequency values at index associated with that response Azzam Mourad 33 Outline StudentPoll.java (2 of 2) Program output Rating Frequency 1 2 2 2 3 2 4 2 5 5 6 11 7 5 8 7 9 1 10 3 Azzam Mourad 34 Error-Prevention Tip 7.1 An exception indicates that an error has occurred in a program. A programmer often can write code to recover from an exception and continue program execution, rather than abnormally terminating the program. When a program attempts to access an element outside the array bounds, an ArrayIndexOutOfBoundsException occurs. Exception handling is discussed in Chapter 13. Azzam Mourad 35 Error-Prevention Tip 7.2 When writing code to loop through an array, ensure that the array index is always greater than or equal to 0 and less than the length of the array. The loop-continuation condition should prevent the accessing of elements outside this range. Azzam Mourad 36 7.6 Enhanced for Statement • Enhanced for statement – Iterates through elements of an array or a collection without using a counter – Syntax for ( parameter : arrayName ) statement Azzam Mourad 37 Outline EnhancedForTest .java 1 // Fig. 7.12: EnhancedForTest.java 2 // Using enhanced for statement to total integers in an array. 3 4 public class EnhancedForTest 5 { 6 public static void main( String args[] ) 7 { 8 int array[] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 }; 9 int total = 0; 10 11 // add each element's value to total 12 for ( int number : array ) 13 total += number; 14 15 System.out.printf( "Total of array elements: %d\n", total ); 16 } // end main 17 } // end class EnhancedForTest Total of array elements: 849 For each iteration, assign the next element of array to int variable number, then add it to total Azzam Mourad 38 7.6 Enhanced for Statement (Cont.) • Lines 12-13 are equivalent to for ( int counter = 0; counter < array.length; counter++ ) total += array[ counter ]; • Usage – Can access array elements – Cannot modify array elements – Cannot access the counter indicating the index Azzam Mourad 39 7.7 Passing Arrays to Methods • To pass array argument to a method – Specify array name without brackets • Array hourlyTemperatures is declared as int hourlyTemperatures = new int[ 24 ]; • The method call modifyArray( hourlyTemperatures ); • Passes array hourlyTemperatures to method modifyArray Azzam Mourad 40 Outline PassArray.java (1 of 2) Line 9 Line 19 1 // Fig. 7.13: PassArray.java 2 // Passing arrays and individual array elements to methods. 3 4 public class PassArray 5 { 6 // main creates array and calls modifyArray and modifyElement 7 public static void main( String args[] ) 8 { 9 int array[] = { 1, 2, 3, 4, 5 }; 10 11 System.out.println( 12 "Effects of passing reference to entire array:\n" + 13 "The values of the original array are:" ); 14 15 // output original array elements 16 for ( int value : array ) 17 System.out.printf( " %d", value ); 18 19 modifyArray( array ); // pass array reference 20 System.out.println( "\n\nThe values of the modified array are:" ); 21 22 // output modified array elements 23 for ( int value : array ) 24 System.out.printf( " %d", value ); 25 26 System.out.printf( 27 "\n\nEffects of passing array element value:\n" + 28 "array[3] before modifyElement: %d\n", array[ 3 ] ); Declare 5-int array with initializer list Pass entire array to method modifyArray Azzam Mourad 41 Outline PassArray.java (2 of 2) Line 30 Lines 36-40 Lines 43-48 Program output 29 30 modifyElement( array[ 3 ] ); // attempt to modify array[ 3 ] 31 System.out.printf( 32 "array[3] after modifyElement: %d\n", array[ 3 ] ); 33 } // end main 34 35 // multiply each element of an array by 2 36 public static void modifyArray( int array2[] ) 37 { 38 for ( int counter = 0; counter < array2.length; counter++ ) 39 array2[ counter ] *= 2; 40 } // end method modifyArray 41 42 // multiply argument by 2 43 public static void modifyElement( int element ) 44 { 45 element *= 2; 46 System.out.printf( 47 "Value of element in modifyElement: %d\n", element ); 48 } // end method modifyElement 49 } // end class PassArray Effects of passing reference to entire array: The values of the original array are: 1 2 3 4 5 The values of the modified array are: 2 4 6 8 10 Effects of passing array element value: array[3] before modifyElement: 8 Value of element in modifyElement: 16 array[3] after modifyElement: 8 Pass array element array[3] to method modifyElement Method modifyArray manipulates the array directly Method modifyElement manipulates a primitive’s copy Azzam Mourad 42 7.7 Passing Arrays to Methods (Cont.) • Notes on passing arguments to methods – Two ways to pass arguments to methods • Pass-by-value – Copy of argument’s value is passed to called method – Every primitive type is passed-by-value • Pass-by-reference – Caller gives called method direct access to caller’s data – Called method can manipulate this data – Improved performance over pass-by-value – Every object is passed-by-reference • Arrays are objects • Therefore, arrays are passed by reference Azzam Mourad 43 Performance Tip 7.1 Passing arrays by reference makes sense for performance reasons. If arrays were passed by value, a copy of each element would be passed. For large, frequently passed arrays, this would waste time and consume considerable storage for the copies of the arrays. Azzam Mourad 44 7.8 Case Study: Class GradeBook Using an Array to Store Grades • Further evolve class GradeBook • Class GradeBook – Represents a grade book that stores and analyzes grades – Does not maintain individual grade values – Repeat calculations require reentering the same grades • Can be solved by storing grades in an array Azzam Mourad 45 Outline GradeBook.java (1 of 5) Line 7 Line 13 1 // Fig. 7.14: GradeBook.java 2 // Grade book using an array to store test grades. 3 4 public class GradeBook 5 { 6 private String courseName; // name of course this GradeBook represents 7 private int grades[]; // array of student grades 8 9 // two-argument constructor initializes courseName and grades array 10 public GradeBook( String name, int gradesArray[] ) 11 { 12 courseName = name; // initialize courseName 13 grades = gradesArray; // store grades 14 } // end two-argument GradeBook constructor 15 16 // method to set the course name 17 public void setCourseName( String name ) 18 { 19 courseName = name; // store the course name 20 } // end method setCourseName 21 22 // method to retrieve the course name 23 public String getCourseName() 24 { 25 return courseName; 26 } // end method getCourseName 27 Declare array grades to store individual grades Assign the array’s reference to instance variable grades Azzam Mourad 46 Outline GradeBook.java (2 of 5) 28 // display a welcome message to the GradeBook user 29 public void displayMessage() 30 { 31 // getCourseName gets the name of the course 32 System.out.printf( "Welcome to the grade book for\n%s!\n\n", 33 getCourseName() ); 34 } // end method displayMessage 35 36 // perform various operations on the data 37 public void processGrades() 38 { 39 // output grades array 40 outputGrades(); 41 42 // call method getAverage to calculate the average grade 43 System.out.printf( "\nClass average is %.2f\n", getAverage() ); 44 45 // call methods getMinimum and getMaximum 46 System.out.printf( "Lowest grade is %d\nHighest grade is %d\n\n", 47 getMinimum(), getMaximum() ); 48 49 // call outputBarChart to print grade distribution chart 50 outputBarChart(); 51 } // end method processGrades 52 53 // find minimum grade 54 public int getMinimum() 55 { 56 int lowGrade = grades[ 0 ]; // assume grades[ 0 ] is smallest 57 Azzam Mourad 47 Outline GradeBook.java (3 of 5) Lines 59-64 Lines 75-80 58 // loop through grades array 59 for ( int grade : grades ) 60 { 61 // if grade lower than lowGrade, assign it to lowGrade 62 if ( grade < lowGrade ) 63 lowGrade = grade; // new lowest grade 64 } // end for 65 66 return lowGrade; // return lowest grade 67 } // end method getMinimum 68 69 // find maximum grade 70 public int getMaximum() 71 { 72 int highGrade = grades[ 0 ]; // assume grades[ 0 ] is largest 73 74 // loop through grades array 75 for ( int grade : grades ) 76 { 77 // if grade greater than highGrade, assign it to highGrade 78 if ( grade > highGrade ) 79 highGrade = grade; // new highest grade 80 } // end for 81 82 return highGrade; // return highest grade 83 } // end method getMaximum 84 Loop through grades to find the lowest grade Loop through grades to find the highest grade Azzam Mourad 48 Outline GradeBook.java (4 of 5) Lines 91-92 Lines 107-108 85 // determine average grade for test 86 public double getAverage() 87 { 88 int total = 0; // initialize total 89 90 // sum grades for one student 91 for ( int grade : grades ) 92 total += grade; 93 94 // return average of grades 95 return (double) total / grades.length; 96 } // end method getAverage 97 98 // output bar chart displaying grade distribution 99 public void outputBarChart() 100 { 101 System.out.println( "Grade distribution:" ); 102 103 // stores frequency of grades in each range of 10 grades 104 int frequency[] = new int[ 11 ]; 105 106 // for each grade, increment the appropriate frequency 107 for ( int grade : grades ) 108 ++frequency[ grade / 10 ]; 109 Loop through grades to sum grades for one student Loop through grades to calculate frequency Azzam Mourad 49 Outline GradeBook.java (5 of 5) Lines 134-136 110 // for each grade frequency, print bar in chart 111 for ( int count = 0; count < frequency.length; count++ ) 112 { 113 // output bar label ( "00-09: ", ..., "90-99: ", "100: " ) 114 if ( count == 10 ) 115 System.out.printf( "%5d: ", 100 ); 116 else 117 System.out.printf( "%02d-%02d: ", 118 count * 10, count * 10 + 9 ); 119 120 // print bar of asterisks 121 for ( int stars = 0; stars < frequency[ count ]; stars++ ) 122 System.out.print( "*" ); 123 124 System.out.println(); // start a new line of output 125 } // end outer for 126 } // end method outputBarChart 127 128 // output the contents of the grades array 129 public void outputGrades() 130 { 131 System.out.println( "The grades are:\n" ); 132 133 // output each student's grade 134 for ( int student = 0; student < grades.length; student++ ) 135 System.out.printf( "Student %2d: %3d\n", 136 student + 1, grades[ student ] ); 137 } // end method outputGrades 138 } // end class GradeBook Loop through grades to display each grade Azzam Mourad 50 Software Engineering Observation 7.1 A test harness (or test application) is responsible for creating an object of the class being tested and providing it with data. This data could come from any of several sources. Test data can be placed directly into an array with an array initializer, it can come from the user at the keyboard, it can come from a file (as you will see in Chapter 14), or it can come from a network (as you will see in Chapter 24). After passing this data to the class's constructor to instantiate the object, the test harness should call upon the object to test its methods and manipulate its data. Gathering data in the test harness like this allows the class to manipulate data from several sources. Azzam Mourad 51 Outline GradeBookTest .java (1 of 2) Line 10 Line 13 1 // Fig. 7.15: GradeBookTest.java 2 // Creates GradeBook object using an array of grades. 3 4 public class GradeBookTest 5 { 6 // main method begins program execution 7 public static void main( String args[] ) 8 { 9 // array of student grades 10 int gradesArray[] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 }; 11 12 GradeBook myGradeBook = new GradeBook( 13 "CS101 Introduction to Java Programming", gradesArray ); 14 myGradeBook.displayMessage(); 15 myGradeBook.processGrades(); 16 } // end main 17 } // end class GradeBookTest Declare and initialize gradesArray with 10 elements Pass gradesArray to GradeBook constructor Azzam Mourad 52 Outline GradeBookTest .java (2 of 2) Program output Welcome to the grade book for CS101 Introduction to Java Programming! The grades are: Student 1: 87 Student 2: 68 Student 3: 94 Student 4: 100 Student 5: 83 Student 6: 78 Student 7: 85 Student 8: 91 Student 9: 76 Student 10: 87 Class average is 84.90 Lowest grade is 68 Highest grade is 100 Grade distribution: 00-09: 10-19: 20-29: 30-39: 40-49: 50-59: 60-69: * 70-79: ** 80-89: **** 90-99: ** 100: * Azzam Mourad 53 7.9 Multidimensional Arrays • Multidimensional arrays – Tables with rows and columns • Two-dimensional array • m-by-n array Azzam Mourad 54 Fig. 7.16 | Two-dimensional array with three rows and four columns. Azzam Mourad 55 7.9 Multidimensional Arrays (Cont.) • Arrays of one-dimensional array – Declaring two-dimensional array b[2][2] int b[][] = { { 1, 2 }, { 3, 4 } }; – 1 and 2 initialize b[0][0] and b[0][1] – 3 and 4 initialize b[1][0] and b[1][1] int b[][] = { { 1, 2 }, { 3, 4, 5 } }; – row 0 contains elements 1 and 2 – row 1 contains elements 3, 4 and 5 Azzam Mourad 56 7.9 Multidimensional Arrays (Cont.) • Two-dimensional arrays with rows of different lengths – Lengths of rows in array are not required to be the same • E.g., int b[][] = { { 1, 2 }, { 3, 4, 5 } }; Azzam Mourad 57 7.9 Multidimensional Arrays (Cont.) • Creating two-dimensional arrays with array- creation expressions – 3-by-4 array int b[][]; b = new int[ 3 ][ 4 ]; – Rows can have different number of columns int b[][]; b = new int[ 2 ][ ]; // create 2 rows b[ 0 ] = new int[ 5 ]; // create 5 columns for row 0 b[ 1 ] = new int[ 3 ]; // create 3 columns for row 1 Azzam Mourad 58 Outline InitArray.java (1 of 2) Line 9 Line 10 1 // Fig. 7.17: InitArray.java 2 // Initializing two-dimensional arrays. 3 4 public class InitArray 5 { 6 // create and output two-dimensional arrays 7 public static void main( String args[] ) 8 { 9 int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } }; 10 int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } }; 11 12 System.out.println( "Values in array1 by row are" ); 13 outputArray( array1 ); // displays array1 by row 14 15 System.out.println( "\nValues in array2 by row are" ); 16 outputArray( array2 ); // displays array2 by row 17 } // end main 18 Use nested array initializers to initialize array1 Use nested array initializers of different lengths to initialize array2 Azzam Mourad 59 Outline InitArray.java (2 of 2) Line 26 Line 27 Program output 19 // output rows and columns of a two-dimensional array 20 public static void outputArray( int array[][] ) 21 { 22 // loop through array's rows 23 for ( int row = 0; row < array.length; row++ ) 24 { 25 // loop through columns of current row 26 for ( int column = 0; column < array[ row ].length; column++ ) 27 System.out.printf( "%d ", array[ row ][ column ] ); 28 29 System.out.println(); // start new line of output 30 } // end outer for 31 } // end method outputArray 32 } // end class InitArray Values in array1 by row are 1 2 3 4 5 6 Values in array2 by row are 1 2 3 4 5 6 array[row].length returns number of columns associated with row subscript Use double-bracket notation to access two-dimensional array values Azzam Mourad 60 7.9 Multidimensional Arrays (Cont.) • Common multidimensional-array manipulations performed with for statements – Many common array manipulations use for statements E.g., for ( int column = 0; column < a[ 2 ].length; column++ ) a[ 2 ][ column ] = 0;