2014-12-16 3 views
0

Может ли кто-нибудь посмотреть, есть ли ошибка в моем коде? Я искал какое-то время и попытался изменить настройки, но я просто не могу заставить его работать.Связанный список разрывается после нескольких итераций

while(current != null) 
{ 
    comparisons++; 
    String currentWord = current.getWord(); 

    if(currentWord.equals(word)) 
    { 
    int count = current.getCount(); 
    count++; 
    current.setCount(count); 
    isFound = true; 
    total++; 
    LLNode next = current.getLink(); 
    previous.setLink(next); 
    current.setLink(top); 
    top = current; 
    } 
    else 
    { 
    previous = current; 
    current = current.getLink(); 
    } 
} 

ОК, так что этот код работает, но не дает мне код ошибки. Он просто застревает в бесконечном цикле, как только он находит нужное ему слово. Весь код должен читать слова из деревушки и добавлять их в связанный список. каждый раз, когда слово уже находится в списке, мы увеличиваем его счетчик и перемещаем эту ссылку в начало связанного списка. Если я последую за ним в режиме отладки, он правильно функционирует примерно на 12 слов или около того, а затем просто останавливается в бесконечном цикле со словом «i» и увеличивается неопределенно. Я очень смущен.

+2

Как это ломается? Какова точная трассировка ошибок/стека? –

+0

Есть ли ошибка, которую вы можете показать? Вам также может потребоваться предоставить больше кода, например, что делает getLink()? –

+1

Также проблема может быть в реализации связанного списка ... – brso05

ответ

0

Это довольно трудно сказать именно то, что предназначено для вашего кода. Я предполагаю, что идеи состоят в том, что он принимает новое слово и добавляет его в список или увеличивает счетчик, если он уже существует. Если это так, то у вас есть довольно много ошибок в коде.

  1. вы не добавляете новый узел, если слово не найдено
  2. вы не двигаетесь к следующему узлу, если текущий узел не соответствует слову
  3. не являетесь выходя из цикла после увеличения счетчика и перемещения узла в начало списка

Здесь я буду использовать псевдокод и дать вам возможность реализовать детали - сообщите мне, если смысл не очевиден.

Node current = top; 
boolean found = false; 
boolean added = false; 
while (!(found || added)) { 
    if (current matches word) { 
     increment current.count and move to top of list; 
     found = true; 
    } else if (current.getLink() == null) { 
     make new node using word, count 1, link null; 
     current.setLink(new node); 
     added = true; 
    } else { 
     current = current.getLink(); 
    } 
} 
0

Поскольку вы Арент изменения тока после того, как вы нашли слово, он никогда не получит нулевую ссылку и она всегда будет иметь currentWord.equals (слово) возвращают истинные Try:

if(currentWord.equals(word)) 
    { 
    int count = current.getCount(); 
    count++; 
    current.setCount(count); 
    isFound = true; 
    total++; 
    LLNode next = current.getLink(); 
    previous.setLink(next); 
    current.setLink(top); 
    top = current; 
    current = next; //add this line 
    } 
    else 
    { 
    previous = current; 
    current = current.getLink(); 
    } 
+0

, который все равно не помогает. поэтому код выходит из цикла и снова вызван из моего основного метода, чтобы добавить следующее слово в список. – evan10593

Смежные вопросы