遍历多个数组-电话号码到单词生成器

时间:2019-03-17 19:41:14

标签: java arrays loops sorting

我正在尝试编写一个程序,以提示用户输入一个七位数的电话号码作为输入,并计算所有可能的七个字母的单词组合。对结果进行排序后,我需要打印前10个组合。

我知道我可以使用if语句单独检查所有输入,并在末尾使用for循环将它们打印出来;但是,我知道有解决此问题的更好方法。

我们还应该使用arraycopy()方法。

任何想法/建议将不胜感激!只是想提高我的编码技能。

EX:标准电话键盘包含从零到九的数字。数字2到9每个都有三个与之关联的字母(如下所示)。许多人发现很难记住电话号码,因此他们使用数字和字母之间的对应关系来形成与他们的电话号码相对应的七个字母的单词。例如,电话号码为686-2377的人可能会使用此工具来开发七个字母的单词“ NUMBERS”。

2: A B C 
3: D E F 
4: G H I
5: J K L
6: M N 0
7: P R S
8: T U V
9: W X Y

每个七个字母的电话号码对应许多不同的七个字母的单词,但是这些单词中的大多数代表无法识别的字母并列。但是,一家理发店的老板可能会很高兴得知该商店的电话号码424-7288对应于“ HAIRCUT”。电话号码为738-2273的兽医会很高兴地知道该号码对应于汽车经销商会很高兴地知道经销商编号639-2277对应于“ NEWCARS”。

package Assignment5;
import java.util.Scanner;
import java.lang.System;

public class PhoneNumber 
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        String[][] letterArray = {{"A", "B", "C"}, {"D", "E", "F"}, {"G", "H", "I"}, {"J", "K", "L"}, {"M", "N", "O"}, {"P", "R", "S"}, {"T", "U", "V"}, {"W", "X", "Y"}};
        char[] numbersAsChar = new char[7];

        System.out.println("Enter phone number: ");
        String input = scan.nextLine();

        //0 and 1 have no alphabetical value
        //If user enters 0 or 1 in phone number - ask them to input a new number
        while(input.contains("0") || input.contains("1") || input.contains(" "))
        {
            System.out.println("Invalid phone number! Please try again without 0 or 1: ");
            input = scan.nextLine();
        }

        //Take each number from user input and assign to the array numbersAsChar
        for(int i = 0; i < input.length(); i++)
        {
            numbersAsChar[i] = input.charAt(i);
        }

        //Print out each individual number input by user - Testing purposes
        for(int i = 0; i < numbersAsChar.length; i++)
            {
                System.out.println("Entered Digit " + (i+1) + ": " + numbersAsChar[i]);
            }

        //Test to see what the value of each character is and print out each letter value
        if (numbersAsChar[0] == '2')
        {
            System.out.println("Hello");
        }


        //use .arraycopy()
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用递归函数来获取所有可能的组合。

此代码应可帮助您找到所有可能的组合


public static final Map<Integer,String[]> conversionMap = new HashMap<Integer,String[]>();

public static List<String> findCombinations(String phoneNumber, int index, String currentString){

    String currentChar = phoneNumber.substring(index,index+1);

    String[] possibleCharacters = conversionMap.get(Integer.valueOf(currentChar));

    List<String> results = new ArrayList<String>();

    for(String character : possibleCharacters){

        if(!(index == phoneNumber.length()-1)){

            List<String> results2 = findCombinations(phoneNumber,index+1,currentString+character);

            results.addAll(results2);

        }else {
            results.add(currentString+character);
        }

    }

    return results;
}