在此程序中,我想用三个“ 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/

10-10 16:28