以下是我曾经混淆的Fisher-Yates算法,但作为输出,我得到了不同数量的不同类型的对象。 因为我无法根据位置进行交换,所以我交换了对象的类型。
public static String shuffle(Grid grid) {
Random rnd = new Random();
for(int i=grid.getGridSize()-1;i>0;i--) {
for(int j=grid.getGridSize()-1;j>0;j--) {
int x = rnd.nextInt(i+1);
int y = rnd.nextInt(j+1);
CardType temp = grid.getTypeAt(x, y);
grid.getCardAt(i, j).setType(temp);
grid.getCardAt(x, y).setType(grid.getTypeAt(i, j));
if(grid.getCardAt(x, y).isFlipped()^(grid.getCardAt(i,j).isFlipped())) {
grid.flipCardAt(i, j);
grid.flipCardAt(x, y);
}
}
}
}