2015-11-17 2 views
0

Я работаю с java на данный момент, и я пытаюсь найти способ остановить печать на консоли (для простоты) после достижения определенного индекса связанногоList. Любая помощь, объясняющая это, будет высоко оценена. Ниже мой класс Node используется для создания списка:Печать системы до определенного индекса связанногоList

protected Integer data; 
protected Node link; 

public Node(Integer data, Node link) { 
    this.data = data; 
    this.link = link; 
} 

public Node addNodeAfter(Integer element) { 
    return link = new Node(element, link); 
} 

public String toString() { 
    String msg = ""; 
    try { 
     if (link == null) { 
      msg = data + " null in tail"; 
     } else { 
      msg = data + ", " + link.toString(); 
     } 
    } catch (StackOverflowError e) { 
     // System.err.println("shit happened here"); 
    } 
    return msg; 
} 

public Integer getData() { 
    return data; 
} 

public Node getLink() { 
    return link; 
} 
+1

Это проще, чтобы направлять вас, если ваш предоставить код или трассировки стека. – Perdomoff

+0

Я отредактировал мое сообщение, поэтому предоставлен мой класс Node – user3688675

+0

попробуйте это и зайдите с нами: 'String toString (int index) {...}', рекурсивным вызовом будет 'link.toString (index-1)' , – BeyelerStudios

ответ

0

Создайте метод toString(int i), который принимает в качестве аргумента числа элементов, которые еще должны быть напечатаны. Если аргумент больше нуля и есть действительная связь, то рекурсивно вызвать toString(i - 1) метод с i пониженного одним:

Код:

public class Node { 
    public static void main(String[] args) { 
     Node linkedList = new Node(1, null); 
     Node node = linkedList; 
     for (int i = 2; i < 10; ++i) 
      node = node.addNodeAfter(i); 
     System.out.println(linkedList.toString(5)); 
    } 

    public String toString(int i) { 
     if (i > 0) { 
      if (link == null) 
       return data.toString(); 
      else 
       return data.toString() + " " + link.toString(i - 1); 
     } else 
      return ""; 
    } 

    protected Integer data; 
    protected Node link; 

    public Node(Integer data, Node link) { 
     this.data = data; 
     this.link = link; 
    } 

    public Node addNodeAfter(Integer element) { 
     return link = new Node(element, link); 
    } 

    public Integer getData() { 
     return data; 
    } 

    public Node getLink() { 
     return link; 
    } 
} 

Выхода

1 2 3 4 5 
+1

Похоже, что это правильно. Я бы предпочел видеть 'data.toString()', а не '' "+ data' –

+0

@PaulHanbury, я отредактировал пример;) –

+1

Большое спасибо, отлично работает! У тебя есть мой топор сэр/мэм! http://cdn.meme.am/instances/500x/49727494.jpg – user3688675

0

Вам нужно будет расширить класс LinkedList и переопределить метод toString(), а затем использовать свой подкласс.

Что-то вроде этого:

public class MyLinkedList<E> extends LinkedList<E> { 

    @Override 
    public String toString() { 
     StringBuffer out = new StringBuffer("["); 
     for (int i=0; i < 3; i++) { 
      out.append(get(0).toString()); 
      out.append(" "); 
     } 
     return out.toString(); 
    } 
} 

И проверить это следующим образом:

public class Main { 
    public static void main(String[] args) { 
     LinkedList<String> myList = new MyLinkedList<String>(); 
     myList.add("one"); 
     myList.add("two"); 
     myList.add("three"); 
     myList.add("four"); 

     System.out.println(myList); 
    } 
} 
Смежные вопросы