Java清单组合

Java清单组合,java,for-loop,arraylist,combinations,Java,For Loop,Arraylist,Combinations,我正在写一个程序来列出字母a、B、C和D的所有可能组合。我已经成功地写了一个程序来列出所有可能的排列 但是,我如何重写程序以工作并生成所有组合(即:ABCD=DCBA和AB=BA,因此只要其中一个存在,就不需要列出另一个) 到目前为止,我当前项目的代码是: import java.util.ArrayList; public class Perms { public static void main(String[] args) { ArrayList<Cha

我正在写一个程序来列出字母a、B、C和D的所有可能组合。我已经成功地写了一个程序来列出所有可能的排列

但是,我如何重写程序以工作并生成所有组合(即:ABCD=DCBA和AB=BA,因此只要其中一个存在,就不需要列出另一个)

到目前为止,我当前项目的代码是:

import java.util.ArrayList;

public class Perms {

    public static void main(String[] args) {

        ArrayList<Character> characters = new ArrayList<Character>();

        characters.add('A');
        characters.add('B');
        characters.add('C');
        characters.add('D');

        int count = 0;

        for (int i = 0; i < characters.size(); i++) {
            for (int j = 0; j < characters.size(); j++) {
                for (int k = 0; k < characters.size(); k++) {
                    for (int d = 0; d < characters.size(); d++) {
                        count++;
                        System.out.println(count + ": " + characters.get(i) + characters.get(j) + characters.get(k) + characters.get(d));
                    }
                }
            }
        }

    }
}
import java.util.ArrayList;
公营烫发{
公共静态void main(字符串[]args){
ArrayList characters=新的ArrayList();
字符。添加('A');
字符。添加('B');
字符。添加('C');
字符。添加('D');
整数计数=0;
对于(int i=0;i
这是我解决您问题的代码:)

我很抱歉,我的答案看起来很难看,因为我刚刚进入Java

import java.util.Vector;

public class StackOverFlow {

    static int n ;
    static Vector<String> set;
    static int[] d ;
    public static void recursion(int t){
        if(t==n){
            PRINT();
            return;
        }
        d[t]=1;
        recursion(t+1);
        d[t]=0;
        recursion(t+1);
    }

    public static void PRINT(){
        System.out.println("ANSWER");
        for(int i=0;i<n;i++)
            if(d[i]==1) System.out.println(set.elementAt(i));
    }


    public static void main(String[] args) {                   
        n = 4;
        set = new Vector<String>(4);
        d = new int[6];
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        recursion(0);
    }
}
import java.util.Vector;
公共类堆栈溢出{
静态int n;
静态向量集;
静态int[]d;
公共静态无效递归(int t){
如果(t==n){
打印();
返回;
}
d[t]=1;
递归(t+1);
d[t]=0;
递归(t+1);
}
公共静态无效打印(){
System.out.println(“应答”);
for(int i=0;i
//返回字符列表的所有组合(作为字符串)
//此方法修改其参数!请确保在必要时进行防御复制
列表字符组合(列表字符)
{
if(chars.isEmpty())
{
列表结果=新建ArrayList();
结果:添加(“”);
返回结果;
}
其他的
{
字符c=字符移除(0);
列表结果=字符组合(字符);
int size=result.size();
对于(int i=0;i

我使用了
List
作为参数,因为
Set
没有从集合中弹出单个项目的方法。

第二种情况相当于4位二进制值的列表。假设a是最右边的数字,D是最左边的。那么总共有16种组合:

DCBA
0000
0001
0010
0011
0100
...
1110
1111
每个组合的解码如下所示:

DCBA
1010 = DB
因为B和D位置都有

在Java中,您有多种方法来生成和/或解码二进制数

例如,对于按位操作:

public static void main(String[] args) {

    // starting from 1 since 0000 is not needed
    for(int i=1; i<16; ++i) {

        // bitwise operation & detects 1 in given position,
        // positions are determined by sa called "masks" 
        // mask has 1 in position you wish to extract
        // masks are 0001=1, 0010=2, 0100=4 and 1000=8
        if( (i & 1) > 0 ) System.out.print("A");
        if( (i & 2) > 0 ) System.out.print("B");
        if( (i & 4) > 0 ) System.out.print("C");
        if( (i & 8) > 0 ) System.out.print("D");

        System.out.println("");

    }
}
publicstaticvoidmain(字符串[]args){
//从1开始,因为不需要0000
对于(inti=1;i0)系统输出打印(“A”);
如果((i&2)>0)系统输出打印(“B”);
如果((i&4)>0)系统输出打印(“C”);
如果((i&8)>0)系统输出打印(“D”);
System.out.println(“”);
}
}

看一看,它处理包含重复值的列表的组合。

对不起,你能更清楚地告诉我你的问题吗。因为,在集合{a,B,C,D}只有一个字符串有四个元素,顺序不重要:是ABCD、BCDA还是CDAB…所以,只有一个字符串,你可以从中选择一个。我想你的问题是:列出所有集合都是由{A、B、C、D}组成的。如果是这样,那么一些答案是:{A}{B}{C}{D}{AB}{AC}……对吗?对不起,我的意思是打印ABCD、ABC、AB等。只打印每一组唯一的字母。给定的代码不会生成所有可能的ABCD排列,而是生成所有长度为4的字母表字符串。AAAA,程序将打印的第一行,不是ABCD的排列。m92,有排列,顺序很重要。它是你在找一个组合。
public static void main(String[] args) {

    // starting from 1 since 0000 is not needed
    for(int i=1; i<16; ++i) {

        // bitwise operation & detects 1 in given position,
        // positions are determined by sa called "masks" 
        // mask has 1 in position you wish to extract
        // masks are 0001=1, 0010=2, 0100=4 and 1000=8
        if( (i & 1) > 0 ) System.out.print("A");
        if( (i & 2) > 0 ) System.out.print("B");
        if( (i & 4) > 0 ) System.out.print("C");
        if( (i & 8) > 0 ) System.out.print("D");

        System.out.println("");

    }
}