在这个程序中,我想用三个“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
s。
您可以用 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 - For 循环二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38869025/