【问题标题】:Loop through multiple arrays - phone number to word generator循环遍历多个数组 - 电话号码到单词生成器
【发布时间】:2019-08-08 05:14:53
【问题描述】:

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

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

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

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

EX:标准电话键盘包含数字 0 到 9。数字 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 的兽医会很高兴知道该号码对应于字母“PETCARE”。汽车经销商会很高兴知道经销商编号 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()
    }
}

【问题讨论】:

  • 所以你需要使用arraycopy 只是因为,或者你真的需要用它做些什么?
  • 另外,你问的不是很清楚。您当前的代码有什么问题?它有什么作用,而您实际上期望什么?通用的“任何想法都会受到赞赏”不是很有帮助。尝试将您的问题缩小到具体的问题。

标签: java arrays loops sorting


【解决方案1】:

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

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


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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2013-11-16
    • 1970-01-01
    • 2020-01-22
    • 2019-07-10
    • 2010-10-24
    相关资源
    最近更新 更多