英文:
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 ]
英文:
I have an enum:
public enum Player
{
X, O, NOBODY
}
And I have this array filled with player items randomly:
Player [size][size] p;
Example matrix:
[ X, NOBODY, NOBODY ]
[ NOBODY, O, O ]
[ X, X, NOBODY ]
I would like to swap an X or O element with a NOBODY element randomly, how can I do that?
Example:
[ NOBODY, NOBODY, NOBODY ]
[ NOBODY, O, O ]
[ X, X, X ]
</details>
# 答案1
**得分**: 1
一个直接的方法是选择一个随机的X/O单元,以及一个随机的NOBODY单元,然后交换它们的值:
```java
// 类内的方法,包含数组
public void 交换值() {
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和二维棋盘单元格总数减一之间的随机数。然后,我们使用整数除法和取模来确定这个单个值对应的二维坐标。
英文:
One straightforward approach would be to select a random X/O cell as well as a random NOBODY cell, and then swap their values:
// 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;
}
The strategy here is to generate a single random number between 0 and one minus the total number of cells in the 2D board. Then, we use integer division and modulus to figure out to what 2D coordinates that single value corresponds.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论