Hallo,
habe mir eine Klasse für eine doppelt verkettete Liste erstellt:
Und nun erstelle ich mir ein Objekt und möchte einen neuen Wert hinzufügen:
Aber ich bekomme beim Kompilieren die Meldung:
Was ist falsch? Die Methode ist doch public?
habe mir eine Klasse für eine doppelt verkettete Liste erstellt:
Code:
public class DList {
static class Node {
Object obj; // Element
Node prev, next; // Zeiger auf Vorgaenger und Nachfolger
public Node(Object o, Node p, Node n) {
obj = o;
prev = p; next = n;
}
public Node() {
obj = null;
prev = next = null;
}
public Object setElement(Object o) {
obj = o;
}
public Object getElement() {
return obj;
}
// Nachfolger setzen
public void setNext(Node n) {
next = n;
}
// Zugriff auf Nachfolger
public Node getNext() {
return next;
}
// Vorgaenger neu belegen
public void setPrevious(Node p) {
prev = p;
}
// Zugriff auf Vorgaenger
public Node getPrevious() {
return prev;
}
}
private Node head = null;
private Node tail = null; // Listenende
public DList() {
head = new Node();
tail = new Node();
// Anfang und Ende "verknuepfen"
head.setNext(tail);
tail.setPrevious(head);
tail.setNext(tail);
}
public void addLast(Object o) {
// Knoten zwischen tail und dessen Vorgaenger einfuegen
Node l = tail.getPrevious();
Node n = new Node(o, l, tail);
l.setNext(n);
tail.setPrevious(n);
}
public Object getFirst() throws ListEmptyException {
if (isEmpty())
throw new ListEmptyException();
// Zugriff ueber Listenanfang
return head.getNext().getElement();
}
public Object getLast() throws ListEmptyException {
if (isEmpty())
throw new ListEmptyException();
// Zugriff ueber Listenende
return tail.getPrevious().getElement();
}
public Object removeFirst() throws ListEmptyException {
if (isEmpty())
throw new ListEmptyException();
// Zugriff ueber Listenanfang
Object o = head.getNext().getElement();
// Knoten zwischen head und Nachfolger entfernen
head.setNext(head.getNext().getNext());
head.getNext().setPrevious(head);
return o;
}
public Object removeLast() throws ListEmptyException {
if (isEmpty())
throw new ListEmptyException();
// Zugriff ueber Listenende
Node n = tail.getPrevious();
// Knoten zwischen tail und Vorgaenger entfernen
n.getPrevious().setNext(tail);
tail.setPrevious(n.getPrevious());
return n.getElement();
}
public int size() {
int s = 0;
Node n = head;
// Knoten zaehlen
while (n.getNext() != null) {
s++;
n = n.getNext();
}
}
public boolean isEmpty() {
// keine Knoten zwischen head und tail
return head.getNext() == tail;
}
}
Und nun erstelle ich mir ein Objekt und möchte einen neuen Wert hinzufügen:
Code:
public class DListTest {
static void main(String[] args) {
DList meineListe = new DList();
DList.addLast("Test");
}
}
Aber ich bekomme beim Kompilieren die Meldung:
Code:
javac DListTest.java
DListTest.java:4: error: non-static method addLast(Object) cannot be referenced from a static context
DList.addLast("Test");
^
1 error
Was ist falsch? Die Methode ist doch public?