我观察到一种非常奇怪的行为。我很确定我的代码中存在错误,但是 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 会永远继续运行。我完全不知道这意味着什么。我很确定它停在 search(9) 与我的代码中的许多 9 有关。但没有错误,我不知所措。
有人可以启发我吗? Eclipse 想要什么?我做错了什么?
编辑:嘎啊!我完全忽略了输出的最后一个“开始搜索”。这就是让我困惑的地方。我想我只是太累了……无论如何,抱歉打扰大家了。是的,这显然只是一个简单的无限循环的例子。我希望我能够自己调试它。
最佳答案
r != c;
是一个表达式,仅当您谈论的是对象的完全相同的实例时才有意义。由于 r
和 c
都是 Datum
对象,因此它的计算结果不会为 true
,除非它们是 完全相同的实例。
您可能想要做的是在 Datum
类上定义 .equals
。然后,您可以调用 !r.equals(c)
来代替。
您还可以重命名这些变量,因为 row
和 column
比 r
和 c 简单得多
.
关于java - Eclipse 在程序执行过程中永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28180872/