我正在尝试制作数独游戏,并且我为每个插入的数字收集了以下验证:
由于我重复了“数字必须是唯一的......”规则,我做了以下设计:
public boolean validate(Integer number)
; 那个s * cks。 我找不到我的设计有什么问题。我只是被它困住了。
关于如何使其发挥作用的任何想法?
答案 0 :(得分:3)
它在哪里过度客观化?我也能感受到,也许还有另一种解决方案比这更简单......
您可以使用单个函数执行此操作,而不是使用3个验证程序类,抽象GroupInterface,可观察对象等。
前面的伪代码:
bool setCell(int cellX, int cellY, int cellValue)
{
m_cells[x][y] = cellValue;
if (!isRowValid(y) || !isColumnValid(x) || !isSubMatrixValid(x, y))
{
m_cells[x][y] = null; // or 0 or however you represent an empty cell
return false;
}
return true;
}
答案 1 :(得分:2)
ColumnGroup,LineGroup和SubMatrixGroup有什么区别? IMO,这三个应该只是通用“组”类型的实例,因为组的类型没有任何改变 - 甚至不需要注意。
听起来你想创建一个检查器(“用户试图写数字X”),而不是解算器。为此,您的可观察模式听起来不错(上面提到的更改)。
Here (link)是使用上述“组”方法的简单数独求解器的示例。