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
答案 0 :(得分:1)
如果您的输出应该是a, ab, ac, abc, b, bc, c
,那么它实际上不是所有字母的组合,因为它还必须包含ca
,cb
等。我想您正在尝试找到这些组合但是按照给定的字符串顺序。下面的方法将能够找到您要做的事情。只需致电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]);
}
答案 1 :(得分:0)
注意到你有两个for循环,但只需要一个就可以从A-Z获得所有可能的组合。但是您列出的组合并非所有可能的字符串组合。
这种可能性是a,ab,ac,abc,acb,b,ba,bc,bac,bca,c,ca,cb,cba,cab
既然你决定围绕for循环构建你的程序,答案就在于你需要第三个循环来代替三个字符,而不仅仅是两个,但没有一个明确的目标来实现你的程序的目标,我可以重写一个例子。
我建议你重新开始,在玩代码以获得语法感觉时,尝试在示例中更有效地编写代码。 original_size是一个无用的变量,例如,你可以使用s.length。