Linked List Programm add Problem

  • Themenstarter Themenstarter _Gerret_
  • Beginndatum Beginndatum
G

_Gerret_

Gast
Hi,

Ich hab ein Problem beim programmieren einer LinkedList.
Ich bin mir ziemlich sicher, dass das Programm funktionieren sollte.

Class: List.java
Java:
package linkedList;

public class List {
    private ListPart root;
    private int length;

    void add(ListPart part) {
        ListPart list = root;
        if (root == null) {
            root = part;
        } else {
            while (list.next != null) {
                list = list.next;
            }
            list.next = part; //<-- Problem!!
        }
        length++;
    }

    public int getLength() {
        return length;
    }

    public boolean isEmpty() {
        if (length == 0) {
            return true;
        }
        return false;
    }

    @Override
    public String toString() {
        return "List [root=" + root + "]";
    }
    
    public static void main(String[] args) {
        List l1 = new List();
        ListPart i1 = new ListPart("Apple");
        l1.add(i1);
        l1.add(i1);
        
        System.out.println(l1);
    }
}

Class: ListPart.java
Java:
package linkedList;

class ListPart {
    ListPart next;
    String name;

    ListPart(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "ListPart [next=" + next + ", name=" + name + "]";
    }
}

Es wird an der gekennzeichneten Stelle(im erstem source), auf einmal nur mehr "Apple"s eingefügt.
Der zweite source ist die "ListPart" Klasse, die einen ListenTeil beschreibt.

Der Debugger(Bild unten) zeigt mir das die List(rechts oben) mit Apples gefüllt ist.

s2hc7wo6.png


Ich verwende eclipse und java 7(habe es in java 6 auch versucht).
Ich danke euch für jede Hilfe! 🙂
 
Hallo,

da du 2 mal das selbe Element addest Wird Element.next zu Element. Das heißt, das Element zeigt auf sich selbst, was keinen Sinn ergibt.
Normalerweise gehört die "ListPart" als InnerClass in die Liste, und NUR die liste selbst erstellt sich dann ein Element, wenn du etwas addest.

Java:
package linkedList;
 
public class List {
    private ListPart root;
    private int length;
 
    void add(String part) {
        ListPart list = root;
        if (root == null) {
            root = new ListPart(part);
        } else {
            while (list.next != null) {
                list = list.next;
            }
            list.next = new ListPart(part); //<-- Problem!!
        }
        length++;
    }
 
    public int getLength() {
        return length;
    }
 
    public boolean isEmpty() {
        if (length == 0) {
            return true;
        }
        return false;
    }
 
    @Override
    public String toString() {
        return "List [root=" + root + "]";
    }
    
    public static void main(String[] args) {
        List l1 = new List();
        l1.add("Apple");
        l1.add("Apple");
        l1.add("Cherry");
        
        System.out.println(l1);
    }
class ListPart {
    ListPart next;
    String name;
 
    ListPart(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "ListPart [next=" + next + ", name=" + name + "]";
    }
}
}

So in etwa, ungetestet...
 
Hallo,

Dein Problem liegt hier drin:

Java:
  List l1 = new List();
  ListPart i1 = new ListPart("Apple");
  l1.add(i1);
  l1.add(i1);

Du fügst 2 mal das selbe Element hinzu, damit ist
Code:
li.next = li
und du hast einen Kreis.

mit:

Java:
  List l1 = new List();
  ListPart i1 = new ListPart("Apple");
  l1.add(i1);
  ListPart i2 = new ListPart("Pear");
  l1.add(i2);

Sollte es so funktionieren, wie du erwartest.
 
danke,

auf das wäre ich im leben nie gekommen.
vielen dank butalive und tkausl 😀D

Lösung:
Java:
    public static void main(String[] args) {
        List l1 = new List();
        ListPart i1 = new ListPart("Apple");
        ListPart i2 = new ListPart("Banana");
        ListPart i3 = new ListPart("Cranberry");
        l1.add(i1);
        l1.add(i2);
        l1.add(i3);

        System.out.println(l1);
    }

Ausgabe:
List [root=ListPart [next=ListPart [next=ListPart [next=null, name=Cranberry], name=Banana], name=Apple]]

noch eine frage am rande:
wie füge ich jetzt zb 2 äpfel in die list ein.

mfg _Gerret_
 
Java:
ListPart i1 = new ListPart("Two Apples");
l1.add(i1);
😀

Java:
ListPart i1 = new ListPart("Apple");
ListPart i2 = new ListPart("Apple");
l1.add(i1);
l1.add(i2);

oder

Java:
for(int i = 0; i < 2; i++) {
	l1.add(new ListPart("Apple"));
}
 

Zurück
Oben