准备了java中的arraylist与算术运算符的所有组合,没有重复组合

时间:2016-03-09 05:03:09

标签: java arraylist

输入:[first col, 第二列, 第三栏]

输出:第一列,第二列,第三列,第一列+第二列,第一列+第三列,第二列+第三列 对于三个col也是如此。

注意:我不想要相同的组合,例如:第一个col +第二个col和第二个col + first都是相同的。 对于三列如:a + b + c和b + c + a两者是相同的。我不想要那个重复的列。请帮帮我。

我尝试使用下面的代码,但它也给了我一个重复的组合。

//准备组合..

 public static void perm2(ArrayList<String> a) throws IOException {
        ArrayList<String> sub = new ArrayList<String>();
        perm2(sub, a);
    }

    static String inputFileLocation = "";

    public static void perm2(ArrayList<String> sub, ArrayList<String> a)
            throws IOException {
        int L = a.size();
        int g = 0;
        String result = "";

        String newLine = System.getProperty("line.separator");
        if (L != 0) {
            for (int i = 0; i < L; i++) {
                ArrayList<String> ab = new ArrayList<String>(sub);
                ab.add(a.get(i));
                ArrayList<String> bc = new ArrayList<String>(a);
                bc.remove(i);
                perm2(ab, bc);
                /* ArrayList to Array Conversion */
                String array[] = new String[ab.size()];
                for (int j = 0; j < ab.size(); j++) {
                    array[j] = ab.get(j);
                    System.out.println("Array: "+ array[j]);
                }
                for (int k = 0; k < array.length; k++) {
                    if (k == 0) {
                        result = array[k];
                    } else {
                        result = "+" + array[k];
                    }
                    System.out.print(result);
                    for (g = array.length; g > 0; g--) {
                        if (array.length == g) {
                            inputFileLocation = "C:\\project\\"
                                    + g + "ColumnData.txt";
                            writeToFile(result, inputFileLocation);
                        }
                    }
                }
                writeToFile(newLine, inputFileLocation);
                System.out.println();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我还没有完整的代码,但你不能做这样的事情:

bc.remove(i);

只有i的值仍然小于列表的大小,此语句才会有效。一旦i变得超过列表的大小,这将是一个问题。

你应该这样做:

bc.remove(0);