In: Computer Science
In Java lang
Standard telephone keypads contain the digits zero through nine. The numbers two through nine each have 3~4 letters (case insensitive) associated with them. Many people find it difficult to memorize phone numbers, so they use the correspondence between digits and letters to develop seven-letter words that correspond to their phone numbers. For example, a person whose telephone number is 686-2377 might remember it as "NUMBERS."
Digit Letters
2 ABC
3 DEF
4 GHI
5 JKL
6 MNO
7 PQRS 8 TUV
9 WXYZ
Each seven-letter word corresponds to exactly one seven-digit telephone number, but a seven-digit number corresponds to many seven-letter strings, most of which are not words.
Create a Project2 class under the project package.
In this project you will develop a program which will find all the corresponding English
words given any specific telephone number. Here are the detailed requirements:
In the Project2 class you will create a static void test() method.
The test method will first ask the user to type in through keyboard a 7-digit telephone
number.
If the number typed in by the user is not 7 digits or the number contains some number
of the digit ‘0’ or ‘1’, then your program reports an error and asks to type in another
number.
If the number typed in by the user is a 7-digit telephone number made up of the digits
‘2’ through ‘9’, then your program will print out all the English words corresponding to the telephone number (and the total number of them), using the given English word library in the “COSC240_P2_EnglishWordList.txt”.
import java.io.*;
import java.util.*;
public class Project2{
public static void test(){
try {
String[]
data =
{"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
ArrayList<String> words = new
ArrayList<String>();
FileInputStream fin = new
FileInputStream("COSC240_P2_EnglishWordList.txt");
Scanner fc =
new Scanner(fin);
while(fc.hasNextLine()){
String word = fc.nextLine();
words.add(word);
}
fc.close();
Scanner sc =
new Scanner(System.in);
String num =
"";
while(true){
System.out.print("Enter a 7-digit phone number(0 and 1 are not
allowed as digits):");
num = sc.nextLine();
int valid = 1;
if (num.length() > 7){
valid = 0;
}
for (int i = 0; i < num.length(); i++){
if (num.charAt(i) < '2' || num.charAt(i) > '9'){
valid = 0;
break;
}
}
if (valid == 0)
System.out.println("Incorrect input\n");
else
break;
}
int count =
0;
for (int i =
0; i<words.size(); i++){
String w = words.get(i);
int valid = 1;
for (int j = 0; j<w.length(); j++){
int a = Character.getNumericValue(num.charAt(j));
String s = data[a];
String s1 = "" + w.charAt(j);
if (!s.contains(s1)){
valid = 0;
break;
}
}
if (valid == 1){
System.out.println(w);
count++;
}
}
System.out.println("Total number of words: " + count);
}
catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
test();
}
}