File CountLetters.java contains a program that reads a word from the user and prints the number of occurrences of each letter in the word. In reviewing the code, note that the word is converted to all upper case first, then each letter is translated to a number in the range 0.25 (by subtracting 'A' or decimal 65) for use as an index. See Appendix C for the Unicode character set. 1. Run CountLetters and enter a phrase, that is, more than one word with spaces or other punctuation in between. It should throw an ArrayIndexOutOfBoundsException, because a non-letter will generate an index that is not between 0 and 25. It might be desirable to allow non-letter characters, but not count them. Of course, you could explicitly test the value of the character to see if it is between 'A' and 'Z'. However, an alternative is to go ahead and use the translated character as an index and catch an ArrayIndexOutOfBoundsException if it occurs. Since don't want to do anything when a non-letter occurs, the handler will be empty. Modify this method to do this as follows: a. Put a try/catch inside the first for loop. b. Add a catch that catches the exception, but don't do anything with it. 2. Now modify the body of the catch so that it displays a useful message followed by the character that is not a letter:
File CountLetters.java contains a program that reads a word from the user and prints the number of
occurrences of each letter in the word. In reviewing the code, note that the word is converted to all
upper case first, then each letter is translated to a number in the range 0.25 (by subtracting 'A' or
decimal 65) for use as an index. See Appendix C for the Unicode character set.
1. Run CountLetters and enter a phrase, that is, more than one word with spaces or other
punctuation in between. It should throw an ArrayIndexOutOfBoundsException, because a
non-letter will generate an index that is not between 0 and 25. It might be desirable to allow
non-letter characters, but not count them. Of course, you could explicitly test the value of the
character to see if it is between 'A' and 'Z'. However, an alternative is to go ahead and use the
translated character as an index and catch an ArrayIndexOutOfBoundsException if it
occurs. Since don't want to do anything when a non-letter occurs, the handler will be empty.
Modify this method to do this as follows:
a. Put a try/catch inside the first for loop.
b. Add a catch that catches the exception, but don't do anything with it.
2. Now modify the body of the catch so that it displays a useful message followed by the
character that is not a letter:
Not a letter: $
// ****************************************************************************
// CountLetters.java
// ****************************************************************************
import java.util.Scanner;
public class CountLetters
{
public static void main(String[] args)
{
int[] counts = new int[26];
Scanner scan = new Scanner(System.in);
//get word from user
System.out.print("\n Enter a single word (letters only): ");
String word = scan.nextLine();
//convert to all upper case
word = word.toUpperCase();
/count frequency of each letter in string
for (int i=0; i < word.length(); i++)
counts[word.charAt(i)-'A']++;
//print frequencies
System.out.println();
for (int i=0; i < counts.length; i++)
if (counts [i] != 0)
System.out.println((char)(i +'A') + ": " + counts[i]);
}
}
Trending now
This is a popular solution!
Step by step
Solved in 3 steps with 3 images