自动化实例生成和命名

  • 本文关键字:实例 自动化 java
  • 更新时间 :
  • 英文 :


我正在编写一个数独解算器,只是为了让自己重新养成使用Java的习惯,但是我遇到了很大的不便。

我试图自己构建必要的类,所以我的总体攻击计划是有一个由行实例数组,列实例数组和扇区实例数组组成的谜题类。这些类中的每一个都由一个数组组成,该数组引用特定实例中的单元格。在构建之后,我计划让Puzzle类创建所有81个单元格,并将每个单元格分配给适当的行、列和扇区。我的问题有两个:

首先,我如何设置它,使每个数组引用其中的cell,这样我就可以保持它们同步?仅仅分配它们就会为每个类创建三个唯一的实例,这些实例必须手动同步。另一种情况(唯一的单元格,每个单元格都有对Row、Column或Sector类的引用)将使遍历Row变得不可能。

第二,我如何自动化生成和分配单元格的过程?我想做一些动态的事情,只是为了节省输入和代码空间——像这样:

private static final String[] letters{"A", "B", "C", "D", "E", "F", "G", "I"};
for (String letter : Puzzle.letters){
    for (int i=1; i<10; i++){
        Cell "letter+j" = new Cell();
        "letter"[] = "letter+j";
        "j"[] = "letter+j";
        <Sector Calculation>
        "sector"[] = "letter+j";
    }
}

显然,这种事情是行不通的,但是写出81个结构和243个赋值似乎是一个非常愚蠢的想法。

想法吗?

我将简单地使用二维整数数组(在本例中为int[9][9])作为数据源-然后考虑哪些索引表示行,列或扇区。在这里,oo方法不是很有意义,它只是您必须做的索引映射数学。

问自己:除了封装一个整数,Cell还能做什么?Row/Column/Sector除了清单9单元格之外还能做什么吗?

我将如何设置它(最近我在某些方面为一个类似于数独的谜题这么做):

创建一个puzzlessquare类。每个正方形都知道它的坐标,并且有对它的左、右、上、下的正方形的引用。

创建一个PuzzleGrid类。这个类(除其他外)有一个二维数组,它将每个正方形保存在相应的坐标中,例如PuzzleGrid。grid[0][0]是左下角的puzzlessquare。

这允许您"逻辑地"遍历行和列——要么从对PuzzleSquare的引用开始,然后调用getLeft()、getRight()等——要么直接引用它们在PuzzleGrid中的坐标。这似乎是冗余,在某种程度上确实如此,但我发现有时要求拼图方块检查其本地邻居比基于全局坐标引用它们更方便。

你的第二个问题,程序化生成,现在应该是一个简单的问题,因为你可以基于全局坐标迭代整个网格。

如果你只是将正方形用于简单的数字存储,那么这就有点多余了,但是你可能会发现(就像我一样)正方形中有逻辑是有意义的,比如知道它们的当前值是否有效,等等。

最新更新