【发布时间】:2013-12-01 20:43:29
【问题描述】:
我正在尝试制作一个演绎算法来解决数独难题。我的板由 ArrayList 中的 81 个节点组成。 - 每个节点都有一个布尔值 如果我的算法(称为 CRME)发现至少有一个节点的布尔值(hasChanged)等于 true,我希望我的算法(称为 CRME)继续尝试解决难题,但我不确定如何执行此操作。 canChange 也是该方法所在类中的全局变量。
public void CRME() {
canChange = true;
while (canChange == true) {
for (Node node : cells) {
scanColumn(node);
scanRow(node);
scanMiniGrid(node);
}
}
}
public void scanRow(Node n){
for(Node node : cells){
int arraySize = node.posVals.size();
ArrayList<Integer> toRemove = new ArrayList<Integer>();
if(node.get_ROW_ID() == n.get_ROW_ID()){
toRemove.add(node.getValue());
}
n.posVals.removeAll(toRemove);
if(arraySize < node.posVals.size()){
node.hasChanged = true;
}
}
}
这是 scanRow 方法,另外两个类似命名的方法是相同的,只是语法发生了明显变化,例如 node.get_ROW_ID();将是 node.get_COL_ID();。
【问题讨论】:
-
不知道你想达到什么目的,但我可以看到一个可能的无限循环。
标签: java arraylist while-loop boolean sudoku