2010-04-13 3 views
0

쌍의 원소를 섞는 방법? 아래의 프로그램은 모든 가능한 쌍을 생성하고 나중에 쌍을 뒤섞습니다. 예 : 셔플 전 가능한 페어는 ab,ac,ae,af입니다. ac,ae,af,ab ... 등으로 셔플했습니다.쌍을 뒤섞는 방법

페어 자체의 요소가 아니라 쌍 자체의 요소로 만드는 방법은 무엇입니까? 예 : ab, ac, 대신 ba, ac을 어떻게 만들 수 있습니까?

String[] pictureFile = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"}; 
    List <String> pic1= Arrays.asList(pictureFile); 
    ... 
ListGenerator pic2= new ListGenerator(pic1); 

ArrayList<ArrayList<Integer>> pic2= new ArrayList<ArrayList<Integer>>(); 


public class ListGenerator { 
    public ListGenerator(List<String> pic1) { 
    int size = pic1.size(); 

    // create a list of all possible combinations 
    for(int i = 0 ; i < size ; i++) { 
     for(int j = (i+1) ; j < size ; j++) { 
      ArrayList<Integer> temp = new ArrayList<Integer>(); 
      temp.add(i); 
      temp.add(j); 
       pic2.add(temp); 
      } 
     } 
     Collections.shuffle(pic2); 
    } 

    //This method return the shuffled list 
    public ArrayList<ArrayList<Integer>> getList() { 
     return pic2; 
    } 
} 

답변

1

당신은 당신이 pic2에 추가하기 전에 temp 목록을 셔플한다. 다음은 고정 된 코드 그러나이 해결책을 향해 단지 첫 단계 (I ListGenerator는 클래스 필드로 pic2 변수를 설정하고 result로 변경 참고)

String[] pictureFile = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"}; 
    List <String> pic1= Arrays.asList(pictureFile); 
     ... 
    ListGenerator pic2= new ListGenerator(pic1); 

    public class ListGenerator { 

    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); 

    public ListGenerator(List<String> pic1) { 
     int size = pic1.size(); 

     // create a list of all possible combinations 
     for(int i = 0 ; i < size ; i++) { 
      for(int j = (i+1) ; j < size ; j++) { 
       ArrayList<Integer> temp = new ArrayList<Integer>(); 
       temp.add(i); 
       temp.add(j); 

       Collections.shuffle(temp); 
       result.add(temp); 
      } 
     } 
     Collections.shuffle(result); 
    } 

    //This method return the shuffled list 
    public ArrayList<ArrayList<Integer>> getList() { 
     return result; 
    } 
    } 

이다. 현재 각 쌍에는 [0..size-1] 범위의 정수가 포함되어 있으므로 쌍은 <0,3>, 등이됩니다. 아마도 원하는 것은 두 글자의 문자열 인 "ab", "dc" 등이있는 쌍을 얻는 것입니다.이 버전에서는 그 의미를 더 잘 전달하는 getList()에서 getPairs()으로 바뀌 었습니다.

List<String> pairs = new ListGenerator('a', 'b', 'c', 'd', 'e', 'f', 'g').getPairs(); 

을 그리고 여기 ListGenerator 그 자체입니다 :

public class ListGenerator { 

    ArrayList<String> result = new ArrayList<String>(); 

    public ListGenerator(char... letters) { 
     int size = letters.length; 

     // create a list of all possible combinations 
     for(int i = 0 ; i < size ; i++) { 
      for(int j = (i+1) ; j < size ; j++) { 
       ArrayList<Character> temp = new ArrayList<Character>(); 
       temp.add(letters[i]); 
       temp.add(letters[j]); 

       Collections.shuffle(temp); 
       result.add("" + temp[0] + temp[1]); 
      } 
     } 
     Collections.shuffle(result); 
    } 

    //This method return the shuffled list 
    public ArrayList<ArrayList<Integer>> getPairs() { 
     return result; 
    } 
    } 
+0

이탈리아 :-) – Jessy

0

하자 또한, 나는 당신이 당신 원하는 문자를 호출 할 필요가 있으므로 다음과 같이 ListGenerator의 생성자은, 문자의 배열을 받아 만든 이러한 개체가 있다고 가정 :

Red dress 
Blue shirt 
Pink panties 

을 그리고 당신은 같은 것들을 얻을 수있는 색상의 clothings의 기사를 모두 셔플하려면 :

Pink shirt 
Blue panties 
... etc 

어떻게 하시겠습니까?

정말 간단합니다. 옷감의 색상과 기사 목록을 따로 따로 섞어서 다시 결합하면됩니다.

Red, Blue, Pink   --> Pink, Blue, Red 
dress, shirt, panties  --> shirt, panties, dress 
           ------------------------ pair 
           Pink shirt 
           Blue panties 
           Red dress 
관련 문제