2015-10-09 5 views
0

Я использую BlueJay как свою IDE. Моя цель - создать метод, который печатает каждое значение в списке в одной строке, начиная с головы, разделенной тремя пробелами.java.lang.StackOverflowError в связанном списке?

То, что я до сих пор там, и это не вызывает никаких ошибок синтаксиса в BlueJ:

public String toString(E val) { 
     Node<E> node = head; 
     Node<E> newNode= new Node<E>(val); 
     String str = " "; 
     if (!isEmpty()) { 
     newNode.next = head; 
     head= newNode; 
     while ((head!= null)){ 
      str += toString(head.val); 
      str += toString(head.val) + " " + " " + " "; 
      newNode = newNode.next; 

     } 
     return str; 

     } 

Однако, после изменения его вокруг, когда я пытаюсь проверить мой код в Голубой J с помощью «инспектировать» и я вхожу строка. Я просто получаю «пробел» вместо строки, которую я ввел с тремя пробелами. У меня есть ощущение, что он должен делать с

my str = toString(head.val); 
      str += toString(head.val) + " " + " " + " "; 

Я пытался конкатенации строк, но это не сработало. Любые предложения по устранению этой ошибки?

+5

Вы никогда не меняется 'head' в' while' цикла, поэтому он никогда не заканчивается. –

+1

Я предполагаю, что внутри цикла 'while' это' head = newNode.next; 'вместо' newNode = newNode.next; '? –

ответ

0

Как говорят люди в комментариях, вы никогда не меняете head внутри своего цикла while. Посмотрите на свое состояние: head!= null. Предполагая, что это изначально верно (поэтому цикл начинает работать), если вы не измените head внутри цикла, его состояние никогда не изменится, поэтому результат вашего условия цикла не изменится, поэтому ваш цикл никогда не завершится. Этот бесконечный цикл содержит рекурсивные вызовы вашей функции, поэтому исключение переполнения стека.

Попробуйте изменить newNode = newNode.next на номер head = head.next, так что вы фактически обновляете значение head. Или вы можете попробовать изменить условие цикла на newNode != null.

0

условие изменения в то время как петля

newNode = head; 
    while (newNode != null) { 
     .... 
     newNode = newNode.next; 
    } 
Смежные вопросы