2014-09-11 98 views
1
String[] test = { "la", "li", "lo" }; 
language(3, test); 

private String language(int n, String[] syllables) { // example of N = 3 
    for (int i = 0; i < syllables.length; i++) { 
     String w1 = syllables[i]; 
     for (int j = 0; j < syllables.length; j++) { 
      String w2 = syllables[j]; 
      for (int x = 0; x < syllables.length; x++) { 
       String w3 = syllables[x]; 
       System.out.println(w1 + w2 + w3); 
      } 
     } 
    } 
} 

我想創建一個可以創建任何形式的字符串數組的遞歸方法。 但我無法做到這一點遞歸字符串數組的排列

變量

n = amount of syllables 
syllables = String Array of the base words 

輸出

lalala 
lalali 
lalalo 
lalila 
lalili 
lalolo 
lilala 
lolala 
lilili 
lololo 
...... 
+0

您需要選擇單個字符,然後選擇其他字符。然後在String中的* other character *上調用相同的permutation()方法。如果字符串== 2的大小返回原始以及其相反。連接負面調用返回的所有字符串。快樂的編碼。 – TheLostMind 2014-09-11 08:31:32

+0

你知道輸出中會有''n^n'''字符串(如果所有元素都是唯一的)? – 2014-09-11 08:33:27

+0

我認爲嚴格來說,lalala並不是3弦的排列。一個排列需要在每個字符串中都有3個字符串 – shlomi33 2014-09-11 08:39:11

回答

3

這會給你你期待的結果:

String[] test = { "la", "li", "lo" }; 
language(3, test, ""); 

private static void language(final int n, final String[] syllables, final String currentWord) { // example of N = 3 
    if (n == 0) { 
     System.out.println(currentWord); 
    } else { 
     for (int i = 0; i < syllables.length; i++) { 
      language(n - 1, syllables, currentWord + syllables[i]); 
     } 
    } 
} 
+0

謝謝,看起來真的很容易理解。 – user2803086 2014-09-11 08:52:38

+0

這也會爲我的目的打印出重複例如''''「la」,「la」}''' – 2014-09-11 08:56:03

+0

,輸入是否包含重複項並不重要。感謝指出,雖然 – user2803086 2014-09-11 09:04:57

2

你會需要這些方針的東西:

private void recursiveMethod(int numberOfSyllablesToAdd, String[] syllables, String word) { 
    for (int i = 0; i < syllables.length; i++) { 
     String newWord = word + syllables[i]; 
     if (numberOfSyllablesToAdd >= 0) { 
      recursiveMethod(numberOfSyllablesToAdd - 1, syllables, newWord); 
     } else { 
      System.out.println(newWord); 
     } 
    } 
} 

注:這是多種原因真的無效(如不使用一個StringBuilder或StringBuffer來創建的話)

+0

在那裏加上'''void''' :-) – 2014-09-11 08:45:15

+0

你的方法的另一個問題:當第一次調用方法而不是'3'時,你必須通過'2'作爲第一個參數。 – 2014-09-11 08:47:56

+0

如果輸入數組不是唯一的,它也會打印重複的數據 – 2014-09-11 08:50:51