Комбинация номера телефона в букву с рекурсивным подходом, исключая нулевой указатель - PullRequest
0 голосов
/ 27 июня 2019

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

Моя проблема в том, что я не могу заставить мою функцию рекурсии работать, я получаю следующий стек ошибок. Ошибка указывает на строку 46 «recursion("", line);» и строку 65 «for (int i = 0; i < letters.length(); i++) {

»
Exception in thread "main" java.lang.NullPointerException
    at JPMorgan.test.PhoneNumberCombo.recursion(PhoneNumberCombo.java:46)
    at JPMorgan.test.PhoneNumberCombo.main(PhoneNumberCombo.java:65)

Это мой код:

import org.apache.commons.io.IOUtils;

public class PhoneNumberCombo {


          static void recursion(String combination, String next_digits) {

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

                Map<String, String> phone = new HashMap<String, String>() {{
                    put("2", "abc");
                    put("3", "def");
                    put("4", "ghi");
                    put("5", "jkl");
                    put("6", "mno");
                    put("7", "pqrs");
                    put("8", "tuv");
                    put("9", "wxyz");
                  }};

                // BASE CASE no more digits found
                if (next_digits.length() == 0) {

                     // the combination is built
                    result.add(combination);
                    System.out.println(result);
                }

                else {

                  String digit = next_digits.substring(0, 1);
                  String letters = phone.get(digit);

                  for (int i = 0; i < letters.length(); i++) {
                    String letter = phone.get(digit).substring(i, i + 1);

                  recursion(combination + letter, next_digits.substring(1));
                }
            }

      }


      public static void main(String[] args) throws IOException {

            InputStream phoneInputStream = IOUtils.toInputStream("123456", "UTF-8");

            InputStreamReader reader = new InputStreamReader(phoneInputStream);
            BufferedReader in = new BufferedReader(reader);
            String line = in.readLine();

            if (line.length() != 0)
                recursion("", line);  

      }
}

1 Ответ

0 голосов
/ 27 июня 2019

Очевидно, что ошибочная строка указывает, что letters равно null. Например, это произойдет для "0" или "1", которых нет на вашей phone карте, или для любых других String.

Вы должны обработать случай, когда letters равен null сразу после String letters = phone.get(digit). Пропустить ли это String или сгенерировать явное исключение для неподходящего символа.

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