c++ - 嵌套的 Switch 语句

标签 c++ nested switch-statement sudoku

目前我正在尝试创建一个程序,该程序将从头开始自动生成完整的数独板,尽管可以使用相同的功能稍作改动来解决部分填充的数独板。任何方式的问题是,当将新数字加载到板中时,您显然必须检查该数字是否已经存在于同一列或行中,但也必须检查它是否存在于加载它的同一个 3x3 正方形中。对程序部分使用嵌套的 switch 语句,您必须在同一个 3x3 正方形中检查数字与数字,尽管 break 语句看起来都在正确的位置。编译器说的是第二个 case 语句的第一个数字,它是嵌套 switch 语句的一部分:“错误:case 标签值已经出现在这个 switch 中”,即使这个数字没有出现,问题是为什么?

代码如下:

bool SudokuClass::checkPresentGrid(int &temporary, int row, int column)
{
bool indicator;
 switch (row)
{
case 0 || 3 || 6:       //If the number is being loaded into row 0,3 or 6
    switch (column)
    {
    case 0 || 3 || 6:   //Check all other spaces in the same 3x3 grid   
        if (temporary == (completeSudoku[row + 1][column + 1] || completeSudoku[row + 1][column + 2] || completeSudoku[row + 2][column + 1] || completeSudoku[row + 2][column + 2]))
        {
            indicator = true;
        }
        break;
    case 1 || 4 || 7:
        if (temporary == (completeSudoku[row + 1][column - 1] || completeSudoku[row + 1][column + 1] || completeSudoku[row + 2][column - 1] || completeSudoku[row + 2][column + 1]))
        {
            indicator = true;
        }
        break;
    case 2 || 5 || 8:
        if (temporary == (completeSudoku[row + 1][column - 2] || completeSudoku[row + 1][column - 1] || completeSudoku[row + 2][column - 2] || completeSudoku[row + 2][column - 1]))
        {
            indicator = true;
        }
        break;
    }
    break;
case 1 || 4 || 7:               //If the number is being loaded into row 1, 4 or 7
    switch (column)
    {
    case 0 || 3 || 6:   //Check all other spaces in the same 3x3 grid   
        if (temporary == (completeSudoku[row - 1][column + 1] || completeSudoku[row - 1][column + 2] || completeSudoku[row + 1][column + 1] || completeSudoku[row + 1][column + 2]))
        {
            indicator = true;
        }
        break;
    case 1 || 4 || 7:
        if (temporary == (completeSudoku[row - 1][column - 1] || completeSudoku[row - 1][column + 1] || completeSudoku[row + 1][column - 1] || completeSudoku[row + 1][column + 1]))
        {
            indicator = true;
        }
        break;
    case 2 || 5 || 8:
        if (temporary == (completeSudoku[row - 1][column - 2] || completeSudoku[row - 1][column - 1] || completeSudoku[row + 1][column - 2] || completeSudoku[row + 1][column - 1]))
        {
            indicator = true;
        }
        break;
    }
    break;
case 2 || 5 || 8:               //If the number is being loaded into row 2, 5 or 8
    switch (column)
    {
    case 0 || 3 || 6:           //Check all other spaces in the same 3x3 grid   
        if (temporary == (completeSudoku[row - 2][column + 1] || completeSudoku[row - 2][column + 2] || completeSudoku[row - 1][column + 1] || completeSudoku[row - 1][column + 2]))
        {
            indicator = true;
        }
        break;
    case 1 || 4 || 7:
        if (temporary == (completeSudoku[row - 2][column - 1] || completeSudoku[row - 2][column + 1] || completeSudoku[row - 1][column - 1] || completeSudoku[row - 1][column + 1]))
        {
            indicator = true;
        }
        break;
    case 2 || 5 || 8:
        if (temporary == (completeSudoku[row - 2][column - 2] || completeSudoku[row - 2][column - 1] || completeSudoku[row - 1][column - 2] || completeSudoku[row - 1][column - 1]))
        {
            indicator = true;
        }
        break;
    }
    break;
}
return indicator;

最佳答案

改变

case 0 || 3 || 6:       //If the number is being loaded into row 0,3 or 6

case 0:
case 3:
case 6:       //If the number is being loaded into row 0,3 or 6

...等等,还有你的其他case语句。

你的代码case 0 || 3 || 6

被评估为 case (0 || 3 || 6)

变成case (false || true || true)

它变成了 case (true),这不是您想要的。

关于c++ - 嵌套的 Switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208557/

相关文章:

使用 css() 更改背景颜色的 JavaScript 开关

python - 将 if-elseif 语句转换为字典

c++ - 如何在不复制的情况下获取 std::stringstream 的长度

c++ - C:使用同一项目中文件中的函数

c++ - 构建时的 node-gyp 链接库依赖项

ios - Swift:许多内置函数返回 Optional 类型。如何在没有丑陋的嵌套 ifs 的情况下将它们变成常规变量?

arrays - 如何在嵌套的 JSON 值上使用 SwiftyJSON

c++ - 指向抽象类的指针的函数重载

java - 无法访问内部类变量

javascript - 按住 Shift 键的同时按下箭头键