1

我需要一个简单的 java 程序,它可以为我生成一组自定义集,比如 {'1','2','3','4'}。结果应该是:{'1','2'},{'2','3'},{'3','4'},{'1','2','3'},{ '2','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 而 a[i] 用于简单数组,我已经编写了任何方法都可以!提前致谢!!:)

4

2 回答 2

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 索引开始的值,子集长度为 size

for (int j = 0; j <= size - 1; j++)
于 2014-03-27T11:06:08.270 回答
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,
于 2014-03-27T11:15:45.657 回答