二维数组项目随机交换

2D Array item swap randomly

我有一个枚举:

public enum Player
{
   X, O, NOBODY
}

我有这个随机填充玩家物品的数组:

Player [size][size] p;

示例矩阵:

[ X, NOBODY, NOBODY ]
[ NOBODY, O, O ]
[ X, X, NOBODY ] 

我想随机将 X 或 O 元素与 NOBODY 元素交换,我该怎么做?

示例:

[ NOBODY, NOBODY, NOBODY ]
[ NOBODY, O, O ]
[ X, X, X ] 






一种直接的方法是 select 一个随机的 X/O 单元格和一个随机的 NOBODY 单元格,然后交换它们的值:

// method inside class containing the array
public void swapValues() {
    Random rand = new Random();
    int xoPos;
    int nobodyPos;

    do {
        xoPos = rand.nextInt(size*size);
        Player p = p[xoPos / size][xoPos % size];
    } while (Player.NOBODY.equals(p));

    do {
        nobodyPos = rand.nextInt(size*size);
        Player p = p[nobodyPos / size][nobodyPos % size];
    } while (!Player.NOBODY.equals(p));

    p[nobodyPos / size][nobodyPos % size] = p[xoPos / size][xoPos % size];
    p[xoPos / size][xoPos % size] = Player.NOBODY;
}

这里的策略是生成一个介于 0 和 1 之间的随机数减去 2D 板上的单元格总数。然后,我们使用整数除法和模数来计算出该单个值对应的二维坐标。