2013-01-02 43 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。

相关问题