2013-05-11 2 views
0

데크에서 카드를 "뒤섞기"로되어있는 다음 Java 코드가 있습니다. 덱은 카드 객체를 포함하는 arraylist입니다. 그러나셔플 데크 알고리듬

private void ShuffleDeck() { 
    //Number of cards in deck 
    int deckSize = deck.size(); 

    //Swapping 100 cards 
    for(int i = 0; i < 15; i++) { 

     //Generating two random card indexes 
     int indexA = (int) ((Math.random() * deckSize-1)); 
     int indexB = (int) (Math.random() * deckSize-1); 
     System.out.println(indexA + " " + indexB); 

     //Getting objects 
     Card cardA = deck.get(indexA); 
     Card cardB = deck.get(indexB); 

     //Temporaily removing these cards from deck 
     deck.remove(cardA); 
     deck.remove(cardB); 

     //Swapping around the two cards 
     deck.add(indexA, cardB); 
     deck.add(indexB, cardA); 

    } 

} 

,이는 이유에 일부 카드는 덱에서 "사라"하는 것이 방법 ... 어떤 제안을 실행하면? :) deck 가정

+1

'Collections.shuffle'을 사용할 수 있습니까? – wchargin

+0

또는 [[Collections.swap()']] (http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#swap%28java.util.List,%20int , % 20int % 29)? –

+0

다른 패키지/라이브러리를 사용하지 않고 모든 것을 구현해야합니까? I.E. 이것은 학문적 운동입니까? – Makoto

답변

9

는 (등, ArrayList 포함) List<Card>입니다 :

public void shuffleDeck() { // please use camelCase method names 
    Collections.shuffle(deck); 
} 

가 바퀴를 재발견하지 마십시오.

+0

감사합니다! : D 컬렉션 라이브러리에 대해 몰랐습니다 :) 또한, 나는 모든 변수 (즉 : MyOtherMethod)를 대문자로하는 FULL_UPPERCASE 및 메소드를 사용하여 낙타를 사용하여 변수에 이름을 지정하는 방법을 가르쳐 왔습니다. : \ – MrD

+0

예, 잘못되었습니다. 메소드에는 소문자 시작 문자가 있어야합니다. 그렇지 않으면 Object.HashCode() 및 Object.Equals()가됩니다. – rolfl

+0

클래스 이름은 PascalCase이고 메서드 및 필드 이름은 camelCase이며 상수는 CAPITALIZED_UNDERSCORED입니다. – skuntsel