2013-01-02 41 views
1
public static void combinations(String s) { 
    char[] original = s.toCharArray(); 
    int original_size = s.length(); 

    String temp = new String(); 
    for (int i = 0; i < original_size; i++) {// add the first element 
     String sb = ""; 
     temp = ""; 
     sb = "" + original[i]; 
     temp = sb.toString(); 

     System.out.println(sb); 
     for (int j = i + 1; j < original_size; j++) {// add the other 
                 // element in the 
                 // array 
      if (i == j) 
       continue; 
      sb = temp + "" + original[j]; 
      System.out.println(sb); 
     } 
     // sb = ""; 
    } 
} 

public static void main(String[] args) { 
    combinations("abc"); 
} 

結果應該是: A,AB,AC,ABC,B,BC,C打印出一個字符串的全部可能的組合

但我的計劃是: A,AB,AC, b,bc,c。我不能打印出ABC

+5

請首先在代碼中修改縮進。 –

+0

你描述的輸出不是「所有可能的組合」,而是「所有可能的子串」,這是完全不同的東西(保留字符順序)。 – alfasin

+0

建議:由於你有預期的輸出,並且程序沒有返回預期的輸出,所以在代碼中的適當的位置放置一個斷點(例如在for循環的第二個開始處),並且看看爲什麼abc永遠不會將通過逐行執行程序來生成。 – NYCdotNet

回答

1

如果您的輸出應該是a, ab, ac, abc, b, bc, c那麼它不是一個真正的所有字母的組合,因爲它也必須包括cacb等我想你正在努力尋找組合,但給定的順序一個字符串。下面的方法將能夠找到你正在嘗試做什麼。請致電orderedCombinations("abc")

public static void orderedCombinations(String s) { 
    for(int i = 0; i < s.length(); i++) { 
     for(String s1 : subStrings(s.substring(i + 1))) { 
      System.out.println(s.charAt(i) + s1); 
     } 
    } 
} 

public static String[] subStrings(String s) { 
    ArrayList<String> strs = new ArrayList<String>(); 
    strs.add(""); 
    for(int i = 0; i < s.length(); i++) { 
     for(int j = i + 1; j < s.length() + 1; j++) 
      strs.add(s.substring(i, j)); 
    } 

    return strs.toArray(new String[0]); 
} 
+0

它不會打印「ac」 – alfasin

+0

@alfasin對不起,因爲它不是真的我雖然試圖找到所有可能的子串,任何方式,謝謝你讓我知道,我已經通過方法糾正。 – Shivam

+0

+1好答案!現在還有一個問題:打印的順序是否重要?他最初提供了:a,ab,ac,abc,b,bc,c' – alfasin

0

注意到你有兩個for-loops,但只有一個是真正需要從A-Z進行所有可能的組合。但是你列出的組合並不是字符串的所有可能組合。

這種可能性將是,AB,AC,ABC,ACB,B,BA,BC,BAC,BCA,C,CA,CB,CBA,駕駛室

既然你決定要圍繞構建程序的答案的答案在於,你需要第三個循環來處理三個字符而不是兩個,但是對於你的程序的目標沒有明確的目標,我不能重寫一個例子。

我建議你重新開始,並在使用代碼來獲得語法的感覺的同時,嘗試在示例中更有效地編寫代碼。例如,original_size是一個無用的變量,你可以使用s.length。

相關問題