Я знаю, что мне не следует изобретать велосипед, но я должен это сделать. Я изо всех сил пытаюсь получить какой-либо вывод из моего LinkedList, я считаю, что мой метод addFirst () неправильно добавляет узел или мой метод toString () неправильно отображает LinkedList. Есть идеи, почему? Я немного озадачен этим и не уверен, где еще искать помощь.

Я не получаю никаких ошибок, просто нулевой вывод.

Основной:

public static void main(String args[]) {

    LinkList theList = new LinkList();

    theList.addFirst("One");
    theList.getFirst();
    theList.size();

    theList.toString();

}   // end main()

LinkList.java:

public class LinkList {

private Node first;
private Node current;

public LinkList() {
    first = null;
    current = first;
}

public boolean isEmpty() {
    return (first == null);
}

public void removeFirst() {
    try {
        if (!isEmpty()) {
            Node temp = first;
            first = first.getNext();
        }
    } catch (NullPointerException e) {
    }
}

public int size() {
    int count = 0;

    if (isEmpty()) {
        return 0;
    }

    while (current != null) {
        current = current.getNext();
        count++;
    }
    return count;
}

@Override
public String toString() {
    String str;
    int size = size();
    str = "Size: " + size;
    str += "\nElements:";
    while (current != null) {
        for (int i = 0; i < size; i++) {
            str += "\nNode: " + current.getNext();
        }
    }
    return str;
}

public String getFirst() {
    if (first == null) {
        return null;
    }
    return first.getData();
}

public void addFirst(String data) {
    Node newNode = new Node(data);
    newNode.getNext();
    first = newNode;
}

public boolean contains(String target) {
    while (current != null) {
        if (current.getData().equals(target)) {
            return true;
        }
        current.getNext();
    }
    return false;
}

Node.java

public class Node {

private String data;
private Node next;

public Node(String data) {
    this.data = data;
}

public String getData() {
    return data;
}

public Node getNext() {
    return next;
}

public void setData(String data) {
    this.data = data;
}

public void setNext(Node next) {
    this.next = next;
}

public String toString() {
    return "Node: " + getData();
}

}
-1
Devin 14 Мар 2018 в 01:38

2 ответа

Лучший ответ

Вы должны окружить вызовы, вывод которых вы хотите видеть в консоли, System.out.println();, например:

System.out.println(theList.size());
System.out.println(theList.toString());

Обратите внимание, что вам не нужно явно вызывать метод toString() во второй строке, System.out.println(theList); автоматически вызывает метод theList toString(), и он эквивалентен System.out.println(theList.toString()); .

1
Przemysław Moskal 13 Мар 2018 в 22:42

В вашем методе addFirst() вы должны:

  • Создайте новый узел
  • Установите текущий узел first как следующий узел нового узла
  • Установите новый узел как first

Вам не хватает одного из вышеуказанных шагов.

Кроме того, все методы, которые включают итерацию списка (toString(), size() и т. Д.), Должны быть инициализированы с помощью current = first; до начала итерации. В противном случае current может быть null и итерация не начнется.

1
Mick Mnemonic 13 Мар 2018 в 22:56