-2

我已经实现了一个纸牌游戏,需要测试洗牌方法。我正在使用 netbeans 7.2,现在遇到问题,因为在我调用 instance.shuffleDeck 方法后,deckBeforeShuffle 是空的,所以我无法将它与我的 deckAfterShuffle 数组进行比较以查看它是否被洗牌!这是我第一次使用 JUnit 并尝试了不同的方法来解决这个问题,但一切都是徒劳的。

@Test
public void testShuffleDeck() {
    System.out.println("shuffleDeck");
    CardDeck instance = new CardDeck(1);
    ArrayList<Card> deckBeforeShuffle = instance.getDeck();         
    instance.shuffleDeck();        
    ArrayList<Card> deckAfterShuffle = instance.getDeck();        
    boolean isShuffled = false;
    int position = 0;
    System.out.println(deckBeforeShuffle.size());
    while(position<deckBeforeShuffle.size() && !isShuffled){

        if(deckBeforeShuffle.get(position).getSuitValue() != deckAfterShuffle.get(position).getSuitValue() && deckBeforeShuffle.get(position).getvalue() != deckAfterShuffle.get(position).getvalue()){

        isShuffled = true;

        }
        position++;
    }
    assertEquals(true, isShuffled); 
}

我的洗牌方法!

公共无效 shuffleDeck(){

    ArrayList<Card> temp = new ArrayList();
    Random rand = new Random();
    int position;
    while(deck.size() > 0){

        position = rand.nextInt(deck.size());
        temp.add(deck.remove(position));
    }
    deck = temp;
}

我很感激任何帮助!

4

2 回答 2

2

实际上,检查不等式就足够了。List 的equals()方法将负责其余的工作。

assertFalse(deckBeforeShuffle.equals(deckAfterShuffle)); // not equal
assertEquals(deckBeforeShuffle.size(), deckAfterShuffle.size()); // but same size
assertEquals( // and same number of elements
    new HashSet<Card>(deckBeforeShuffle), new HashSet<Card>(deckAfterShuffle); 

而对于洗牌,你可以使用现有的Collections.shuffle()方法。但是请注意,您必须先复制列表,然后再对其进行洗牌。

于 2013-02-04T16:56:25.970 回答
0

正如这个答案(以及互联网上的许多其他来源)中所描述的,有assertArrayEquals(),它正是这样做的。

于 2013-05-07T19:39:41.083 回答