java - For 循环二维数组

标签 java arrays loops 2d

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

相关文章:

installation - 需要安装 JRE 方面的帮助吗?

java - 将新对象添加到数组时,对象被覆盖

arrays - 多维数组如何在PowerShell中工作?

c++ - 每秒运行代码 10000 次

java - IO异常循环

java - 使用 Java 中的输入创建 for 循环

java - 无法调用 findByEmail 因为 "this.userRepository"是空错误

java - 在 Java 8 并行流中,终端操作是否在返回之前完成所有计算?

java - 字符串在多个位置的索引

java - 无法显示带有括号的对象的结果,Web 服务示例