2017-02-17 3 views
1

Ich habe Probleme beim Ausdrucken aller Vokalkombinationen eines bestimmten Eingangs. Meine Eingabe ist "ETWAS" und ich möchte alle Vokalkombinationen wie sxmxthxng ausdrucken, wobei x für aeiou Vokale steht. Ich glaube, mein Problem ist, dass ich einen Vokal finde, ihn mit allen anderen Vokalen ändere und weitermache. Ich muss den Rest des Wortes fortsetzen und zusätzliche Vokale finden und diese ändern, bevor ich fortfahre.Wie kann ich alle Vokalkombinationen eines Strings erstellen und jede Kombination einer ArrayList hinzufügen?

Andere Refs

vowelList is an ArrayList containing all lower case vowels. 

-Code

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

Beispielausgabe mit dem Eingang "ETWAS"

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

Aus irgendeinem Grund ist es mir alle Kombinationen mit 'u' ist aber geben, nicht die anderen Vokale. Ich würde gerne alle Ergebnisse auch für die anderen Vokale erhalten.

+0

Zuerst sollten Sie versuchen, eine Funktion zu erstellen, die alle Permutationen einer Zeichenfolge druckt. Also gibt abc abc, acb, bca, bac, cab, cba aus. Es ist eine ziemlich harte Funktion zu erstellen, wenn Sie noch nie eine rekursive Methode erstellt haben. –

+0

Ja, ich habe das - das Problem damit ist, ich will keine Liste 12! lange. Ich versuche nur alle Vokalkombinationen zu erstellen. Was ich dachte, ich könnte mit einer verschachtelten Schleife machen. – Yawn

+0

Verschachtelte Schleifen sind nützlich, wenn Sie wissen, wie viele Schleifen verschachtelt werden sollen. In dieser Anwendung haben Sie jedoch keine Ahnung, wie viele Vokale im Wort vorkommen. Verwenden Sie dazu eine rekursive Methode. – coolioasjulio

Antwort

2

Wie bereits vorgeschlagen, kann Ihr Problem am besten durch Rekursion (mit Backtracking) gelöst werden. Ich habe Ihren Code geändert, um die erforderliche Ausgabe zu drucken. Guck mal !!

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

} 

Aufruf createVowelCombos ("etwas", 0) von der aufrufenden Methode.

Verwandte Themen