Java:生成自定义元素集

时间:2014-03-27 10:55:07

标签: java arrays set powerset

我需要一个简单的java程序,它可以为我生成一组自定义集,例如{' 1',' 2',' 3', ' 4'}。结果应该是: {' 1'&#39 2'},{' 2'&#39 3'},{' 3&#39 ;, ' 4'},{' 1'&#39 2'&#39 3'},{' 2',& #39; 3'' 4'}。

我已尝试过powerset的代码,但输出并不可取。如果代码可能是这样的话会很明显:​​

for(j=2;j<set.size()-1;j++)
{
for(i=0;i<set.size()-1;i++)
{
//a[i],a[i+1] when j=2
//a[i],a[i+1],a[i+2] when j=3
}
} 

我知道.size()适用于ArrayList,而[i]适用于简单数组,并且我已经按照任何方法编写了!!提前致谢!! :)

2 个答案:

答案 0 :(得分:1)

此代码应打印您想要的值:

    final int[] values = {1, 2, 3, 4};
    for (int size = 2; size < values.length; size++) {
        for (int i = 0; i + size <= values.length; i++) {
            for (int j = 0; j <= size - 1; j++) {
                System.out.print(values[i + j]);
            }
            System.out.println();
        }
    }

从示例中,我们看到您要打印长度大于1且小于总计集的值集,以便以下行代码:

for (int size = 2; size < values.length; size++) {

之后我们计算子集的起始索引,注意不要遇到IndexArrayOutOfBounds异常(参见下面的行)

for (int i = 0; i + size <= values.length; i++) {

从那里我们只打印从i index开始的值和子集长度

for (int j = 0; j <= size - 1; j++)

答案 1 :(得分:0)

这是生成所需结果的示例代码:

    int[] array = { 1, 2, 3, 4 };
    int size = 2;
    for (int j = 0; j < array.length; j++) {
        for (int i = 0; i <= array.length - size; i++) {
            int[] temp = Arrays.copyOfRange(array, i, i + size);
            for (int x : temp) {
                System.out.print(x + ",");
            }
            System.out.println();
        }
        size++;
        if (size == array.length) {
            break;
        }
    }

输出:

1,2,
2,3,
3,4,
1,2,3,
2,3,4,