2010-12-10 37 views
-1

我已經在下面寫了這樣的代碼,並且我會將兩個列表傳遞給此方法,其中tree list是空列表,而array list是對象列表。爲什麼不返回正確的排列!

public void permute(List<Element> tree, List<Element> array) { 
    if (array.size() <= 1) { 
     for (Element i : array) { 
      tree.add(i); 
     } 
     System.out.println(tree.toString()); 
    } else { 
     for (int i = 0; i < array.size(); i++) { 
      try { 
       list = array.subList(0, i); 
       list.add(array.get(i + 1)); 
       tree.add(array.get(i)); 
       permute(tree, list); 

      } catch (StringIndexOutOfBoundsException exception) { 
       exception.printStackTrace(); 
      } 
     } 
    } 

} 

,但它會打印下面幾行:

[digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 

也行繼續,但我在這裏只是複製了一些他們的! 它有什麼問題? 請幫我 感謝 編輯: 這是字符串的代碼,我用它爲我的對象:

import java.io.*; 
public class NewClass{ 
    public static void main(String args[]) throws IOException{ 
     String str; 
     System.out.println("Enter the initial string"); 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     str=br.readLine(); 
     System.out.println("Permutations are :"); 
     permute("", str); 
    } 

    public static void permute(String beginningString, String endingString) { 
    if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 
    else 
     for (int i = 0; i < endingString.length(); i++) { 
     try { 
      String newString = endingString.substring(0, i) + endingString.substring(i + 1); 

      permute(beginningString + endingString.charAt(i), newString);   
     } catch (StringIndexOutOfBoundsException exception) { 
      exception.printStackTrace(); 
     } 
     } 
    } 
} 
+0

你到底想達到什麼目的?如果你通過數組[1,2,3,4,5],你期望什麼結果? – 2010-12-10 11:17:02

+0

你最初**作爲參數傳遞了什麼,即'beginningString'的初始值和'endingString'的初始值是什麼? – 2010-12-10 11:17:49

+0

我想要所有的組合!例如5個數字,我想要5個!每個排列都將顯示爲一個數組列表。 – user472221 2010-12-10 11:21:39

回答

1

嘗試下面的代碼。我簡單地採用了適用於字符串的排列方法,並將它(幾乎一行一行地)轉換爲適用於任何列表的函數。

public static <E> void permute2(List<E> beginningList, List<E> endingList) { 
    if (endingList.size() <= 1) { 
     //combine the two lists 
     List<E> result = new ArrayList<E>(beginningList); 
     result.addAll(endingList); 
     System.out.println(result); 
    } else 
     for (int i = 0; i < endingList.size(); i++) { 

      //create a list without the ith element 
      List<E> newList = new ArrayList<E>(endingList); 
      newList.remove(i); 

      //create a list by adding the ith element to beginning 
      List<E> newBeginning = new ArrayList<E>(beginningList); 
      newBeginning.add(endingList.get(i)); 

      permute2(newBeginning, newList); 
     } 
} 

例子:

public static void main(String args[]) { 
    permute2(new ArrayList<Integer>(), new ArrayList<Integer>(Arrays.asList(1, 2, 3))); 
} 

打印:

[1, 2, 3] 
[1, 3, 2] 
[2, 1, 3] 
[2, 3, 1] 
[3, 1, 2] 
[3, 2, 1] 
+0

你是對的,謝謝你的回答,我想找到我真正的錯誤! – user472221 2010-12-10 12:23:24

相關問題