Проход по нескольким массивам - номер телефона для генератора слов - PullRequest
1 голос
/ 17 марта 2019

Я пытаюсь написать программу, которая предлагает пользователю ввести семизначный телефонный номер в качестве ввода и вычисляет все возможные семибуквенные словосочетания.После сортировки результатов мне нужно распечатать первые и последние 10 комбинаций.

Я знаю, что могу отдельно проверить все входные данные с помощью операторов if и распечатать их с помощью цикла for в конце;Тем не менее, я знаю, что есть лучший способ решить эту проблему.

Мы также должны использовать метод arraycopy().

Будем весьма признательны за любые идеи / советы!Просто хочу улучшить свои навыки кодирования.

EX: Стандартные телефонные клавиатуры содержат цифры от нуля до девяти.С цифрами от двух до девяти каждая связана с тремя буквами (как показано ниже).Многим людям трудно запоминать телефонные номера, поэтому они используют соответствие между цифрами и буквами, чтобы создать семизначные слова, соответствующие их телефонным номерам.Например, человек, чей номер телефона 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, соответствует «СТРИЖЕ». Ветеринар с номером телефона 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()
    }
}

1 Ответ

0 голосов
/ 17 марта 2019

Вы можете использовать рекурсивную функцию, чтобы получить все возможные комбинации.

Этот код должен помочь вам найти все возможные комбинации


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...