java - Eclipse 在程序执行过程中永远运行

标签 java eclipse

我观察到一种非常奇怪的行为。我很确定我的代码中存在错误,但是 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; 是一个表达式,仅当您谈论的是对象的完全相同的实例时才有意义。由于 rc 都是 Datum 对象,因此它的计算结果不会为 true,除非它们是 完全相同的实例。

您可能想要做的是在 Datum 类上定义 .equals 。然后,您可以调用 !r.equals(c) 来代替。

您还可以重命名这些变量,因为 rowcolumnrc 简单得多.

关于java - Eclipse 在程序执行过程中永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28180872/

相关文章:

java - 多个应用程序实例日志记录

java - 将 UUID 存储为 base64 字符串

java - 为什么不运行方法调用?

java - 如何在java中将char []转换为字符串?

php - 我可以以 "commit"自动更新我的服务器文件的方式使用 subversion 吗?

java - Spring Boot 项目中的作业调度库

java - 我怎样才能对齐和改进这个乘法表?

java - 如何延迟 Eclipse 错误警告

c++ - 无法打开文件c++

java - Spring Boot - 数据源运行时错误