如何测试一张纸牌是否在Java中足够洗牌

fro*_*moa 4 java random algorithm shuffle playing-cards

我必须测试,看看这种方法是否已经改组了一副牌.这里如果代码为实际的洗牌部分.

 public void randomShuffle () {
               for (int i = 0; i < DECK_SIZE; i++) {
                   int place = (int)((Math.random()*(51-i))+i);
                   Card temp = this.cardAt(i);
                   this.cardList[i] = this.cardAt(place);
                   this.cardList[place] = temp;
           }
       }
Run Code Online (Sandbox Code Playgroud)

测试它是否被洗牌的问题是我只能切换两张卡而且它会被认为是洗牌.这是我到目前为止对随机shuffle的测试.

static void randomShuffleTest () {
       Deck deck1 = Deck.newDeckOf52();
       Deck deck2 = Deck.newDeckOf52();
       deck2.randomShuffle();           

       assert false == deck1.equals(deck2);
    }
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,我如何测试某些东西是否已被洗牌?

Ste*_*n C 6

单个样本无法做到这一点.但你可以做的是对一些改组的甲板进行统计分析,以寻找非随机性的迹象.

我想你可能会更好地在math.stackexchange.com上问这个......那些聪明的家伙们都会出去玩.如果他们能用简单的术语解释"数学"(对于像你我这样愚蠢的IT人员),你应该能够用Java编写测试代码.


当我说"你不能这样做"时......很明显你可以测试一下甲板是否没有被洗牌,或者洗牌是否已经破坏了甲板.但这些都不是对你的标准的可靠测试......"足够洗牌".