6.3. Copying Arrays

 
[Page 181 ( continued )]

6.5. Returning an Array from a Method

You can pass arrays when invoking a method. A method may also return an array. For example, the method shown below returns an array that is the reversal of another array:


[Page 182]

Line 2 creates a new array result . Lines 4 “7 copies elements from array list to array result . Line 9 returns the array. For example, the following statement returns a new array list2 with elements 6 , 5 , 4 , 3 , 2 , 1 :

   int   [] list1 = {   1   ,   2   ,   3   ,   4   ,   5   ,   6   };   int   [] list2 = reverse(list1); 

6.5.1. Example: Counting the Occurrences of Each Letter

Listing 6.4 presents a program to count the occurrences of each letter in an array of characters . The program does the following:

1.
Generate one hundred lowercase letters randomly and assign them to an array of characters, as shown in Figure 6.8. You can obtain a random letter by using the getRandomLowerCaseLetter() method in the RandomCharacter class in Listing 5.6.

Figure 6.8. The chars array stores 100 characters, and the counts array stores 26 counts, each of which counts the occurrences of a letter.


2.
Count the occurrences of each letter in the array. To count the occurrences of each letter in the array, create an array, say counts , of twenty-six int values, each of which counts the occurrences of a letter, as shown in Figure 6.8. That is, counts[0] counts the number of a 's, counts[1] counts the number of b 's, and so on. Figure 6.9 shows a sample run of the program.

Figure 6.9. The program generates one hundred lowercase letters randomly and counts the occurrences of each letter.
(This item is displayed on page 184 in the print version)


Listing 6.4. CountLettersInArray.java
(This item is displayed on pages 182 - 183 in the print version)
 1   public class   CountLettersInArray { 2  /** Main method */  3   public static void   main(String args[]) { 4  // Declare and create an array  5   char   [] chars =  createArray();  6 7  // Display the array  8 System.out.println(   "The lowercase letters are:"   ); 9  displayArray(chars);  

[Page 183]
 10 11  // Count the occurrences of each letter  12   int   [] counts =  countLetters(chars);  13 14  // Display counts  15 System.out.println(); 16 System.out.println(   "The occurrences of each letter are:"   ); 17  displayCounts(counts);  18 } 19 20  /** Create an array of characters */  21   public static      char   [] createArray()  { 22  // Declare an array of characters and create it  23   char   [] chars =   new char   [   100   ]; 24 25  // Create lowercase letters randomly and assign  26  // them to the array  27   for   (   int   i =     ; i < chars.length; i++) 28 chars[i] = RandomCharacter.getRandomLowerCaseLetter(); 29 30  // Return the array  31   return   chars; 32 } 33 34  /** Display the array of characters */  35   public static      void   displayArray(   char   [] chars)  { 36  // Display the characters in the array 20 on each line  37   for   (   int   i =     ; i < chars.length; i++) { 38   if   ((   i   +   1   ) %   20   ==     ) 39 System.out.println(chars[i] +   " "   ); 40   else   41 System.out.print(chars[i] +   " "   ); 42 } 43 } 44 45  /** Count the occurrences of each letter */  46   public static      int   [] countLetters(   char   [] chars)  { 47  // Declare and create an array of 26 int  48   int   [] counts =   new int   [   26   ]; 49 50  // For each lowercase letter in the array, count it  51   for   (   int i   =     ; i < chars.length; i++) 52 counts[chars[i] -   'a'   ]++; 53 54   return   counts; 55 } 56 57  /** Display counts */  58   public static      void   displayCounts(   int   [] counts)  { 59   for   (   int   i =     ; i < counts.length; i++) { 60   if   ((i +   1   ) %   10   ==     ) 61 System.out.println(counts[i] +   " "   + (   char   )(i +   'a'   )); 62   else   63 System.out.print(counts[i] +   " "   + (   char   )(i +   'a'   ) +   " "   ); 64 } 65 } 66 } 


[Page 184]

The createArray method (lines 21 “32) generates an array of one hundred random lowercase letters. Line 5 invokes the method and assigns the array to chars . What would be wrong if you rewrote the code as follows ?

   char   [] chars =   new char   [   100   ]; chars = createArray(); 

You would be creating two arrays. The first line would create an array by using new char[100] . The second line would create an array by invoking createArray() and assign the reference of the array to chars . The array created in the first line would be garbage because it is no longer referenced. Java automatically collects garbage behind the scenes. Your program would compile and run correctly, but it would create an array unnecessarily.

Invoking getRandomLowerCaseLetter() (line 28) returns a random lowercase letter. This method is defined in the RandomCharacter class in Listing 5.6.

The countLetters method (lines 46 “55) returns an array of twenty-six int values, each of which stores the number of occurrences of a letter. The method processes each letter in the array and increases its count by one. A brute-force approach to count the occurrences of each letter might be as follows:

   for   (   int   i =     ; i < chars.length; i++)   if   (counts[chars[i] ==   'a'   ) count[     ]++;   else if   (counts[chars[i] ==   'b'   ) count[   1   ]++; ... 

But a better solution is given in lines 51 “52.

   for   (   int   i =     ; i < chars.length; i++) counts[chars[i] -   'a'   ]++; 

If the letter ( chars[i] ) is 'a' , the corresponding count is counts['a' - 'a'] (i.e., counts[0] ). If the letter is 'b' , the corresponding count is counts['b' - 'a'] (i.e., counts[1] ), since the Unicode of 'b' is one more than that of 'a' . If the letter is 'z' , the corresponding count is counts['z' - 'a'] (i.e., counts[25] ), since the Unicode of 'z' is 25 more than that of 'a' .

Figure 6.10 shows the call stack and heap during and after executing createArray . See Review Question 6.14 to show the call stack and heap for other methods in the program.


[Page 185]
Figure 6.10. (a) An array of one hundred characters is created when executing createArray . (b) This array is returned and assigned to the variable chars in the main method.

 


Introduction to Java Programming-Comprehensive Version
Introduction to Java Programming-Comprehensive Version (6th Edition)
ISBN: B000ONFLUM
EAN: N/A
Year: 2004
Pages: 503

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net