2016-03-09 49 views
-1

輸入:[第一關口, 第二欄, 第三山口]製備與算術運算器的java數組列表的所有組合而不重複組合

輸出:第一欄,第二欄,第三欄,第一欄+第二欄,第一列+第三列,第二列+第三列以及三列等。

注意:我不希望有相同的組合,如:第一列+第二列和第二列第一列兩者都是相同的。 爲三列,如: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(); 
      } 
     } 
    } 
+0

請加你已經嘗試過的代碼,您遇到任何異常/錯誤。不要指望我們按需發佈全面解決方案,因爲SO不是免費的代碼編寫服務。 – user2004685

+0

你需要密碼嗎?如果是這樣,你是在錯誤的地方。 –

+0

編輯你的問題,並把所有的細節,包括代碼和錯誤堆棧在其中。 – user2004685

回答

0

我沒有經歷過完整的代碼好了嗎,但你不能做這樣的事情:

bc.remove(i); 

此語句將只持有良好直到i的值仍然小於列表的大小。一旦i變得大於列表的大小,這將是一個問題。

你應該做這樣的事情:

bc.remove(0);