ArrayLists: Verständnisproblem bei remove()

Wuhsaa

Mitglied
Hallo, bin gerade dabei die
Java:
 public Object remove(int index)
für eine LinkedList selber zu machen. Irgendwo muss ein Fehler sein, da nicht die korrekten Elemente gelöscht werden .. Laut Rahmenprogramm sollen die Elemente mit dem Index 1 bis 5 gelöscht werden. Komischerweise wird immer ein Index übersprungen wie in der Ausgabe gut zu sehen ist ..


Java:
/**
* Bestimmung des Elements zu einem vorgegbenen Index
*/
   private Entry entry(int index) 
    {
		Entry e = this.head;

		for (int i=0; i<=index; i++)
			e = e.next;

        return e;
    }



/**
* Entfernen des Elements an der Position index
* und Rückgabe des an dieser Position gespeicherten Objekts
*/
public Object remove(int index)
	{
		Object result = null;
		
		if (index > this.size()-1)
			return result;
		
		Entry e = entry(index);
		// ! damit "leere Objekte" nicht gelöscht werden
		if (e != null)
		{
			result = e.data;
			Entry prev = entry(index-1);
			prev.next = e.next;
			this.size--;
			
			// Listenende korrigieren
			if (e == this.tail)
				this.tail = prev;
		}
		return result;
	}

Hier ist noch das Rahmenprogramm, in dem die Funktion getestet wurde:
Java:
  	public static void main(String[] args)
  	{
  		//Erzeugen der LinkedList
    	System.out.println("Verkettete Liste");
    	MyLinkedList list1 = new MyLinkedList();
    	fillList(list1);       // Liste wird mit den Werten 0 - einschließlich 19 gefüllt
    	printList(list1);    // Liste wird ausgedruckt
    	
    	for (int i = 1; i <= 5; i++)
    	{
    			System.out.println("Element geloescht: "+list1.remove(i));
    	}
    	printList(list1);

und die Ausgabe:
Verkettete Liste
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-
Element geloescht: 1
Element geloescht: 3
Element geloescht: 5
Element geloescht: 7
Element geloescht: 9
0 2 4 6 8 10 11 12 13 14 15 16 17 18 19
 
Zuletzt bearbeitet:
Hm, also es mag an der Uhrzeit liegen, aber was ist daran jetzt verkehrt? Du hast exakt die Ausgabe die du auch erhalten würdest mit einer LinkedList aus util.

Liste = 0,1,2,3,4,5,6,7,8....
du löscht Index1 = 1
Liste = 0,2,3,4,5,6,7,8,...
du löschst Index2 = 3
usw....

(wenn du wirklich 1-5 löschen willst, mach halt list1.remove(1) in deiner Schleife,??)
 
Zuletzt bearbeitet:
achjaaaaa klar .... 😀 da nach jedem remove-Aufruf die Indizes für die werte sich verändern ..
hab das i-wie alles in einem Schritt gezählt also:

Index 1 = 1
Index 2 = 2
.........
Index 5 = 5

okay dann ist es doch richtig hehe joa ist schon etwas spät 😀

thx!
 

Neue Themen


Zurück
Oben