在此程序中,我想用三个“ O”替换随机位置的三个“ N”。我试图使用一个forloop来实现这一点,但是,我得到的“ O”的数量却不一致。我不确定哪一部分出了错...
static char grid[][];
public static void Board()
{
Random rn = new Random();
grid = new char [3][3];
for(int row = 0; row<grid.length; row++)
{
for(int col = 0; col<grid.length; col++)
{
grid[row][col] = 'N';
for(int i = 0; i<3; i++)
{
grid[rn.nextInt(3)][rn.nextInt(3)] = 'O';
}
System.out.print(grid[row][col]);
}
System.out.println();
}
}
最佳答案
您需要分开循环。
首先用N
s初始化数组,然后替换3个N
s:
for(int row = 0; row<grid.length; row++) {
for(int col = 0; col<grid[row].length; col++) {
grid[row][col] = 'N';
}
}
for(int i = 0; i<3; i++) {
grid[rn.nextInt(3)][rn.nextInt(3)] = 'O';
}
在内部初始化循环中运行
for(int i = 0; i<3; i++)
会导致3个随机单元被分配给O
3x3次,这些单元以后可以用N
覆盖,因为您要在初始化之前进行此操作。您还应该注意,由
grid[rn.nextInt(3)][rn.nextInt(3)] = 'O'
分配的单元格可能不是3个唯一的单元格,因此最终可能仍少于3个O
。您可以将第二个循环替换为while循环,以确保完全替换了3个单元格:
int i = 0;
while(i < 3) {
int x = rn.nextInt(3);
int y = rn.nextInt(3);
if (grid[x][y] != 'O') {
grid[x][y] = 'O';
i++;
}
}
关于java - 对于Loop 2D阵列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38869025/