2013-06-18 1 views
0

나는 oncreate()의 시작 부분에 내가 섞어 놓은 목록이 2 개 있습니다. 그리고 나중에 "새로운 게임"버튼을 누르면 나중에 다시 셔플하고 싶습니다. 그들이 처음 섞여있을 때 :목록을 여러 번 뒤섞기

그리고 모든 것이 잘 작동합니다. 그러나 내가 "새로운 게임"버튼을 눌렀을 때 다시 섞으려고 할 때 위와 같은 방법으로 시도해 보았고 rnd와 seed의 이름을 변경하려고 시도했지만 제대로 작동하지 않았습니다. 두 번째 셔플 후 목록이 일치하지 않습니다. 내가 무엇을 시도해야하는지에 대한 제안?

+1

'목록이 일치해야 함'이란 무엇을 의미합니까? –

+0

목록은 두 번째로 섞여 있지만 일치하지는 않습니다. 처음으로 그들이 섞여서 그들이 짝을 지을 때. 일치하는 말은 목록 1의 행 0은 섞인 후 어디로 전환 되든 관계없이 항상 목록 2의 행 0과 일치해야한다는 의미입니다. – ez4nick

+2

그래서 당신을 올바르게 이해한다면, 당신은 무작위로 두리스트를 뒤섞고 있지만 같은 결과를 기대할 수 있습니까? shuffle의 동작이 반복적이어서는 안되기 때문에 매우 위험합니다. 한 목록을 섞거나 다른 목록을 동시에 셔플하는 등의 다른 메커니즘을 사용하는 것이 좋습니다. –

답변

2

문제의 가능한 해결책은 클래스의 두 목록에있는 값을 래핑하는 것입니다. 그러던 어느 목록에 그 클래스의 객체를 추가하고 그 셔플, 예를 들면 :

public class Test { 
    public static void main(String[] args) { 
     Random rnd = new Random(); 
     int seed = rnd.nextInt(); 
     rnd.setSeed(seed); 
     List<Pair> pairs = new ArrayList<Pair>(); 

     pairs.add(new Pair(1, "else")); 
     pairs.add(new Pair(2, "bar")); 
     pairs.add(new Pair(3, "pair")); 

     Collections.shuffle(pairs, rnd); 

     for (Pair pair : pairs) { 
      System.out.println(pair.drawable + " " + pair.sequence); 
     } 
    } 

} 

class Pair { 
    int drawable; 
    CharSequence sequence; 

    Pair(int drawable, CharSequence sequence) { 
     this.drawable = drawable; 
     this.sequence = sequence; 
    } 
} 

이 목록을 주문한 다른 발생합니다 반복적으로 코드를 실행하지만, 값은 여전히 ​​짝됩니다.