2010-12-10 73 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