Eclipse просто работает вечно в середине выполнения программы

1

Я наблюдаю действительно странное поведение. Я почти уверен, что в моем коде есть ошибка, но поведение Eclipse настолько странно, что я ничего не могу понять.

Во-первых, здесь мой код: http://pastebin.com/JCaW53GM.

Я пытаюсь решить проблему Project Euler 96, т.е. Я пытаюсь построить решателя Sudoku, используя 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), имеет какое-то отношение ко многим девяткам в моем коде. Но нет ошибки, и я в недоумении.

Кто-нибудь может просветить меня? Что хочет Eclipse? Что я сделал не так?

Изменить: Гааа! Я полностью забыл, что последний "начальный поиск" выхода. Это меня смутило. Полагаю, я просто слишком устал... во всяком случае, извините всех за то, что вы беспокоили вас. Да, это просто простой случай бесконечного цикла. Надеюсь, я смогу самостоятельно отладить это.

  • 3
    Пожалуйста, включите соответствующую часть вашего кода в сообщение, а не просто ссылку на него.
  • 0
    Похоже, вы думаете, что это может быть проблемой Eclipse ... так что вы пробовали запустить его из командной строки или DrJava (или любого легковесного редактора Java) вместо этого?
Показать ещё 2 комментария
Теги:

1 ответ

2

r != c; это выражение, которое имеет смысл только в том случае, если вы говорите о том же экземпляре объекта. Так как r и c являются Datum объектами, он не будет вычисляться true, если они не являются точно такой же экземпляр.

То, что вы, вероятно, хотите сделать, это определить .equals вместо этого в классе Datum. Затем вы можете вызвать !r.equals(c).

Вы также можете переименовать эти переменные, так как row и column намного проще, чем r и c.

  • 0
    Спасибо за комментарий, но это на самом деле идея. Это просто вертикальный список, и цикл должен остановиться, когда он вернется к «самому верхнему» элементу. И да, я, вероятно, переименую переменные. На данный момент код более или менее просто один к одному псевдокод из бумаги Кнута.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню