我观察到一种非常奇怪的行为。我很确定我的代码中存在一个错误,但Eclipse的行为非常奇怪,以至于我无法解决任何问题。
首先,这是我的代码:http://pastebin.com/JCaW53GM。
我正在尝试解决Project Euler's problem 96,即我正在尝试使用Knuth的Dancing Links构建一个数独求解器。经过大量的准备,这个程序应该可以解决问题:
private static void search(int k) {
System.out.println("start search");
if (masterHeader.right == masterHeader) {
return;
}
// choose column
Column c = new Column("");
int s = Integer.MAX_VALUE;
for (Column j = (Column) masterHeader.right; j != masterHeader;
j = (Column) j.right) {
if (j.size < s) {
c = j;
s = j.size;
}
}
// dancing links
c.cover();
for (Datum r = c.bottom; r != c; r = r.bottom) {
o[k] = r;
for (Datum j = r.right; j != r; j = r.right) {
j.column.cover();
}
System.out.println("before calling search(" + k + " + 1)");
search(k + 1);
r = o[k];
c = r.column;
for (Datum j = r.left; j != r; j = j.left) {
j.uncover();
}
}
c.uncover();
}
每当我运行程序时,我得到以下输出:
start search
before calling search(0 + 1)
start search
before calling search(1 + 1)
start search
before calling search(2 + 1)
start search
before calling search(3 + 1)
start search
before calling search(4 + 1)
start search
before calling search(5 + 1)
start search
before calling search(6 + 1)
start search
before calling search(7 + 1)
start search
before calling search(8 + 1)
start search
之后---没什么。没有错误,没有溢出,Eclipse只会继续运行。我完全不知道这意味着什么。我很确定它在搜索(9)停止的事实与我的代码中的许多9有关。但是没有错误,我不知所措。
任何人都可以开导我吗? Eclipse想要什么?我做错了什么?
编辑: Gaaah!我完全忽略了输出的最后“开始搜索”。这让我很困惑。猜猜我太累了...无论如何,对不起大家都在打扰你。是的,它显然只是一个无限循环的简单情况。我希望我能够自己调试。
答案 0 :(得分:2)
r != c;
是一个表达式,只有在谈论对象的完全相同的实例时才有意义。由于r
和c
都是Datum
个对象,因此除非它们是完全相同的实例,否则它不会评估为true
。
您可能想要做的是在.equals
类上定义Datum
。然后,您可以改为呼叫!r.equals(c)
。
您也可以对这些变量进行重命名,因为row
和column
比r
和c
要简单明了。