Вопрос по list, java – LinkedList Java обход и печать

1

Буду очень признателен, если вы поможете ответить на этот вопрос:

Я уже создал свой собственный связанный список очень стандартным способом, используя Java. Ниже приведены мои занятия:

public class Node {

   private Object obj;
   private Node next;

   public Node(Object obj){
       this(obj,null);
   }

   public Node(Object obj,Node n){
       this.obj = obj;
       next = n;
   }

   public void setData(Object obj){
       this.obj = obj;
   }

   public void setNext(Node n){
       next = n;
   }

   public Object getData(){
       return obj;
   }

   public Node getNext(){
       return next;
   }

}




public class linkedList {
    private Node head;


    public linkedList(){
        head = null;
    }

    public void setHead(Node n){
        head = n;
    }

    public Node getHead(){
        return head;
    }


   public void add(Object obj){
       if(getHead() == null){
           Node tmp = new Node(obj);
           tmp.setNext(getHead());
           setHead(tmp);
       }else{
           add(getHead(),obj);
       }
   }


   private void add(Node cur,Object obj){
       if(cur.getNext() == null){
           Node tmp = new Node(obj);
           tmp.setNext(cur.getNext());
           cur.setNext(tmp);
       }else{
           add(cur.getNext(),obj);
       }
   }


}

Я пытаюсь напечатать значение, которое я вставил в список, как показано ниже

public static void main(String[] args) {
        // TODO code application logic here
        Node l = new Node("ant");
        Node rat = new Node("rat");
        Node bat = new Node("bat");
        Node hrs = new Node("hrs");

        linkedList lst = new linkedList();
        lst.add(l);
        lst.add(rat);
        lst.add(bat);
        lst.add(hrs);



        Node tmp = lst.getHead();
        while(tmp != null){

            System.out.println(tmp.getData());
            tmp = tmp.getNext();

        }


    }

но вывод, который я получил от IDE,

[email protected]
[email protected]
[email protected]
[email protected]

почему он печатает ссылку, а не фактическое значение строки, например bat, ant, rat ...?

Если я хочу распечатать фактическое значение, то что мне делать?

большое спасибо

Вы можете добавить метод toString () в свой класс Node, тогда он должен печататься нормально Kunal
Это в стороне, но почему вы не используете дженерики? Tyler Treat

Ваш Ответ

4   ответа
-1

LinkedList состоит из Objects, метод Objects toString выводит ссылку. Если вы хотите распечатать строку, вам нужно либо изменить LinkedList на String / Generics, либо вывести распечатку следующим образом:

String output = (String)tmp.getData();
System.out.println(output);

(вы можете сделать это в одну строку, если хотите).

Error: User Rate Limit Exceededjava.util.LinkedListError: User Rate Limit Exceeded
java.util.LinkedListError: User Rate Limit ExceededgetHeadError: User Rate Limit ExceededSystem.out.println((Object) "hello")Error: User Rate Limit ExceededhelloError: User Rate Limit Exceeded
linkedListError: User Rate Limit Exceeded
Error: User Rate Limit ExceededLinkedListError: User Rate Limit ExceededNodeError: User Rate Limit ExceededgetData()Error: User Rate Limit ExceededObject.
Error: User Rate Limit Exceeded user1139747
1

Вам необходимо переопределитьtoString() метод наNode:

@Override
String toString() {
  String val = // however you want to represent your Node
  return val;
}

и распечатать узел:

System.out.println(tmp);

В качестве альтернативы, естьNode.getData() вернутьString если вы знаете, что собираетесь только хранитьStrings - изменитьObjectсString вNode определение

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

ОБНОВЛЕНИЕ: после немного больше размышлений (спровоцированных комментариями) я вижу кое-что неправильно:

tmp.getData() должен возвращать строку (на основе одиночного параметра ctor узла и того, что вы передаете строки), но вывод о ссылках наNode объекты. Возможно ли, чтоlinkedList.add переустанавливаетNode's obj участникNode вместо?

Error: User Rate Limit ExceededSystem.out.println(tmp.getData());Error: User Rate Limit ExceededNodeError: User Rate Limit Exceeded
-1

Ваш getData () в классе Node возвращает тип объекта. Вам нужно привести его в строку, чтобы он правильно печатался println ().

System.out.println ((String) tmp.getData ());

должен сделать трюк для вас.

Error: User Rate Limit Exceeded
4

ВашlinkedList класс уже создаетNodeдля тебя!

linkedList list = new linkedList();
list.add("foo");
list.add("bar");
Node tmp = lst.getHead();
while(tmp != null){
    System.out.println(tmp.getData());
    tmp = tmp.getNext();
}

Будет печатать

foo
bar

Похожие вопросы