2017-02-17 17 views
1

У меня возникли проблемы с печатью всех комбинаций гласных заданного ввода. Мой вход «ЧТО-ТО», и я хотел бы распечатать все комбинации гласных, такие как sxmxthxng, где x - гласные гласных. Я считаю, что моя проблема в том, что я нахожу гласную, меняю ее на все остальные гласные и двигаюсь дальше. Мне нужно продолжить оставшуюся часть слова и найти дополнительные гласные и изменить их перед продолжением.Как создать все комбинации гласных String и добавить каждую комбинацию в ArrayList

Другие рефов

vowelList is an ArrayList containing all lower case vowels. 

Код

private static void createVowelCombos(String word) { 
    Set<String> rmRepeats = new HashSet<>(); 
    StringBuilder sbAddWord = new StringBuilder(word); 
    String[] splitWord = word.split(""); 

    for (int i = 0; i < word.length(); i++) { 
     // System.out.println("real word: " + splitWord[i]); 

     if (splitWord[i].matches(".*[aeiou]")) { 
      // System.out.println("Split: " + splitWord[i]); 
      for (int j = 0; j < 5; j++) { 
       sbAddWord.setCharAt(i, vowelList.get(j).charAt(0)); 
       System.out.println(sbAddWord.toString()); 
      } 
     } 
    } 
} 

Пример вывода с входом "НЕЧТО"

samething 
semething 
simething 
something 
sumething 
sumathing 
sumething 
sumithing 
sumothing 
sumuthing 
sumuthang 
sumutheng 
sumuthing 
sumuthong 
sumuthung 

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

+0

Во-первых, вы должны попытаться создать функцию, которая печатает все перестановки строки. Таким образом, ввод abc будет выводить abc, acb, bca, bac, cab, cba. Это довольно сложная функция для создания, если раньше вы никогда не делали рекурсивный метод. –

+0

Да, у меня это, проблема в том, что я не хочу список 12! длинный. Я пытаюсь просто собрать все комбинации гласных. Который я думал, что могу сделать с вложенным циклом. – Yawn

+0

Вложенные циклы полезны, когда вы знаете, сколько циклов в гнездо. Однако в этом приложении вы не представляете, сколько гласных будет в слове. Для этого вам следует использовать рекурсивный метод. – coolioasjulio

ответ

2

Как уже говорилось, ваша проблема может быть решена с помощью рекурсии (с обратным отсчетом). Я изменил ваш код, чтобы напечатать требуемый результат. Взгляни !!

private static void createVowelCombos(String word, int start) { 
    StringBuilder sbAddWord = new StringBuilder(word); 
    String[] splitWord = word.split(""); 
    if(start==splitWord.length) 
    { 
     System.out.println(word); 
     return; 
    } 
    if (splitWord[start].matches(".*[aeiou]")) { 
      // System.out.println("Split: " + splitWord[i]); 
      for (int j = 0; j < 5; j++) { 
       sbAddWord.setCharAt(start, vowelList.get(j).charAt(0)); 
       createVowelCombos(sbAddWord.toString(),start+1); 
       //System.out.println(sbAddWord.toString()); 
      } 
    } 
    else 
     createVowelCombos(sbAddWord.toString(),start+1); 

} 

Вызвать createVowelCombos («что-то», 0) из вызывающего метода.