2017-02-17 9 views
1

特定の入力のすべての母音の組み合わせを印刷できない場合があります。私の入力は「SOMETHING」で、sxmxthxngのような母音の組み合わせをすべて印刷したいと思っています。ここでxはaeiou母音です。私は母音を見つけ、他のすべての母音と一緒にそれを変えていくことが私の問題だと信じています。私は残りの言葉を続けて、追加の母音を見つけてそれらを変えて先へ進む必要があります。Stringのすべての母音の組み合わせを作成し、各組み合わせをArrayListに追加するには

その他の引用文献

vowelList is an ArrayList containing all lower case vowels. 

それは私に 'U' とのすべての組み合わせを与えているいくつかの理由の入力 "SOMETHING"

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

とコード

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

サンプル出力が、他の母音ではない。私は他の母音についてもすべての結果を得たいと思います。

+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( "something"、0)を呼び出します。

関連する問題