二维数组项目随机交换
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 板上的单元格总数。然后,我们使用整数除法和模数来计算出该单个值对应的二维坐标。
我有一个枚举:
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 板上的单元格总数。然后,我们使用整数除法和模数来计算出该单个值对应的二维坐标。