有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数独游戏更好的解决方案,检查棋盘是否有效

我正在用jave编写数独游戏。 我有一个3x3 int值的类(称为square),还有一个包含square类型的3x3数组的类(称为game)

我想在游戏中写一个方法来检查棋盘是否有效。 在每个square对象中,都有一个isvalid返回true,即square包含从1-9到2个方法的所有数字,这些方法获取行或列的索引号以及布尔数组,如果索引号在板中,则将其置为true(数组大小为10,未使用索引0):

public void whosThereRow(int row, boolean[] values)
{
    for(int n=1;n<10;n++)
    {
        for (int j=0;j<BOARD_SIZE ;j++)
        {
            if(_board[row][j] == n )
            {
                values[n] = true;
            }
        }
    }
}

现在我的问题是,如果棋盘是有效的,检查游戏对象的最佳有效方法是什么。到目前为止,我的工作解决方案是:

public Boolean isValid()
{
    boolean isValid = true;
    boolean[][] valuesRows = new boolean[9][10];
    boolean[][] valuesCols = new boolean[9][10];
    for(int i = 0; i<GAME_SIZE && isValid; i++)
    {
        for (int j = 0; j<GAME_SIZE && isValid; j++)
        {
            if(_game[i][j].allThere())
            {
                for(int h = 0;h<3;h++)
                {
                    _game[i][j].whosThereRow(h,valuesRows[h+(i*3)]);
                    _game[i][j].whosThereCol(h,valuesCols[h+(j*3)]);  
                }

            }
            else
            {
                isValid = false;
            }
        }
    }
    for(int i=0;i<9 && isValid;i++)
    {
        for (int j=1;j<10 && isValid;j++)
        {
            if(!valuesRows[i][j] || !valuesCols[i][j])
            {
                isValid = false;
            }
        }
    }

    return isValid;
}

出于某种原因,我觉得这是超高效的。 我希望使我的解决方案更好-更少的循环,可能更少的布尔数组。 正在寻求帮助。谢谢


共 (0) 个答案