![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
ArniLand |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
При вызове функции удаления узлов согласно условию if (current.course == 3 && (current.month ==6 || current.month == 7 || current.month==8)) компилятор виснет, т.е. отображаются все узлы дерева, отображается обход дерева, а на моменте когда вызвал функцию удалению строка программа зависает. Не могу понять не так в программе. Что может вызывать зависание программы?
Код программы:
Это сообщение отредактировал(а) ArniLand - 29.9.2010, 20:43 |
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Давайте разберемся по порядку.
Во-первых, на компилятор Вы грешите зря, он только делает из исходного кода .class-файлы, а вот выполняет их JVM. Если разница между JVM и компилятором для Вас неочевидна, обратитесь к любому учебнику по Java, там это очень подробно освещается. Во-вторых, JVM не "зависает", Вы сами написали для нее бесконечный цикл и она послушно его выполняет. Обратите внимание вот на эту часть метода удаления:
Когда управление попадает сюда в первый раз, key = 4 и current.data = 1. Прослеживаем выполнение: цикл за циклом выполняется else-ветка, которая не делает ничего. В итоге цикл никогда не завершается. Логику вашего кода проследить не так просто, но раз уж дерево названо бинарным, вероятно стоит добавить
в else-ветку. В-третьих, советую вам использовать дебаггер и отслеживать выполнение программы по шагам - очень помогает. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
ArniLand |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
1. Добавил в else ветку то, что вы указали. Но всеравно работает бесконечный цикл.
2. Как именно с помощью дебаггера прослеживать программу пошагово? 3. Вам как я понял тоже не понятно, что нужно исправить? |
|||
|
||||
jk1 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Мне понятно. Почему я сразу этого не сказал? Посмотрите на постановку вопроса:
именно на этот вопрос я Вам и ответил. Но раз Вас на самом деле интересует не причина, а методы её исправления, давайте копать в эту сторону.
У меня заработало. Я правда еще пару условий удалил, которые всегда истины или всегда ложны. Вот что работает у меня:
Постановку задачи Вы все равно не провели, так что сложно оценить насколько правильно получилось. Смотрите, это то что ожидалось?
Берите любую популярную IDE: NetBeans, Eclipse, Intelij Idea. В них есть особый режим запуска кода - Debug. В этом режиме исполнение кода будет останавливаться на специально выбранных Вами точках - BreakPoint. После этого можно смотреть значения интересующих переменных, выполнять программы по шагам (trace), обычно клавишей F8 и делать много других интересных вещей. Это сообщение отредактировал(а) jk1 - 29.9.2010, 21:38 -------------------- Opinions are like assholes — everybody has one |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |