remove at index

Hacer

Aktives Mitglied
HALLO!!

In der Klasse List soll eine Methode removeAtIndex(int index) erstellen. Wird eine negative Zahl oder ein zu großer Index übergeben, soll die Liste unverändert bleiben. Da mein Code nicht richtig läuft, kann ich meine Methode nicht überprüfen. Deshalb wollte ich fragen, ob sich jemand meinen Code angucken und ein Feedback dazu geben kann.
Danke im Voraus

Code:
private void removeAtIndex(int index){
        if(index<0){
            return;
        }
        int currPos=0;
        Element pointer= firstElement;
        Element afterPointer =null;
        while(currPos< index && pointer!= null){
            pointer =pointer.getNext();
            currPos++;
            afterPointer= pointer.getNext();
            pointer.setNext(null);
        }
    }
 

Meniskusschaden

Top Contributor
Da mein Code nicht richtig läuft, kann ich meine Methode nicht überprüfen.
Wie meinst du das? Falls er nicht kompiliert hast du doch Fehlermeldungen und falls er kompiliert kannst du mittels Debugger oder System.out.println Variablen kontrollieren.

Ich würde dir empfehlen, einen Schreibtischtest zu machen, also die Liste auf Papier aufzuzeichnen und dann dein Programm gedanklich schrittweise durchzugehen und die Zeiger entsprechend umzuhängen. Dann siehst du relativ schnell, wie deine Schleife die Liste kaputt macht.
 

JStein52

Top Contributor
Vielleicht solltest du dir deinen Algorithmus noch mal laut umganssprachlich überlegen: was musst du tun wenn du das Element an der Position "index" löschen willst ? Es handelt sich ja wohl um eine einfach verkettete Liste bei der jeweils der "next"-Zeiger eines Elementes auf das nächste Element der Liste zeigt.
Welchen Zeiger musst du nun wie umsetzen ?
 
X

Xyz1

Gast
Wenn du jetzt noch erklären könntest was der Link mit dem vorliegenden Thread zu tun hat ?

Es handelt sich um dieselbe/die gleiche List/Liste!!!!

Und die (ursprüngliche) hatte viele Fehler (compiliert e gar nicht), die ich behoben hab.

Worauf willst du hinau? Man kann removeAtIndex nicht einfach so ohne Kontext....

:)
 
X

Xyz1

Gast
Doch kann man schon wenn man weiss dass es firstElement, getNext() und setNext() gibt

Der Compiler weiß es nicht, der Test weiß es auch nicht. Ein Mensch könnte es vielleicht außerhalb des Kontexts verstehen, aber es soll doch übersetzt werden, oder nich?

Wer weiß, ob getNext() nicht einfach die Liste mischt????

Also heute mal nicht beschimpfen. Schnapp dir ein Bier. :oops:
 

JStein52

Top Contributor
Ja, mir war schon klar dass in den Klassen noch Fehler waren. Ich wusste nur auf Anhieb nicht was er mit dem link zur removeAtIndex(index) beitragen wollte. Denn die ist ja schön übersichtlich zu schreiben auch wenn man den restlichen Code noch nicht hat/kennt. Könnte so ja glatt Teil einer Java-Klausur sein. Natürlich braucht man den Rest dann zum Testen und Debuggen.
 

Hacer

Aktives Mitglied
Ich habe jetzt eine neue Lösung zu removeAtIndex:
Java:
    private void removeAtIndex(int index){
        if(index<0){
            return;
        }
        else if(index==0&& firstElement!=null){
            Element pointer= firstElement;
            firstElement = pointer.getNext();
        }else{
            Element pointer =firstElement;
            int currPos=0;
            while(pointer!=null&& currPos!= index){
                pointer=pointer.getNext();
                currPos++;
            }if(pointer!=null){
                pointer.setNext(pointer.getNext().getNext());
            }
        }
    }
 

Meniskusschaden

Top Contributor
@JStein52 pointer zeigt nach der while-Schleife auf den index-1ten Stelle.
Bist du davon nur überzeugt oder hast du es auch getestet? Ich habe es zwar auch nicht getestet, teile aber die Einschätzung von @JStein52.

Meines Erachtens gibt es noch mindestens drei Fehler: den von @JStein52 beschriebenen, den von mir beschriebenen und vermutlich ist es auch nicht korrekt, dass du firstElement nicht auf null setzt, wenn du das letzte verbliebene Element entfernst und somit eine leere Liste erhältst.
 

Hacer

Aktives Mitglied
Ich habe es jetzt nochmal versucht, auf eine andere Lösung komme ich leider nicht. Weiß auch gar nicht ob das so geht :(
Java:
    private void removeAtIndex(int index){
        if(index<0){
            return;
        }
        else if(index==0&& firstElement!=null){
            Element pointer= firstElement;
            firstElement = pointer.getNext();
            pointer=null;
        }else{
            Element pointer =firstElement;
            int currPos=0;
            while(pointer!=null&& currPos!= index){
                pointer=pointer.getNext();
                currPos++;
            }if(pointer!=null){
                Element indexteStelle= pointer.getNext();
                pointer.setNext(indexteStelle.getNext());
                indexteStelle = null;
            }
        }
    }
 

InfectedBytes

Top Contributor
pointer=null kannst du machen, bringt aber nichts, da pointer eh nur eine lokale Variable ist.

Es ist immer noch das Problem vorhanden, welches von @JStein52 angesprochen wurde. Du sollst das Element an Position i löschen. Du suchst aber das Element an Stelle i und löscht dann das nachfolgende Element.
 

Meniskusschaden

Top Contributor
und vermutlich ist es auch nicht korrekt, dass du firstElement nicht auf null setzt, wenn du das letzte verbliebene Element entfernst und somit eine leere Liste erhältst.
Ich glaube, bei diesem vermeintlichen Fehler habe ich mich geirrt, denn durch
firstElement = pointer.getNext();setzt du beim Entfernen des letzten Elementes firstElement ja doch auf null, weil pointer.getNext();in dem Fall ja auch null enthält.
Einfacher wäre aber firstElement = firstElement.getNext();, weil pointer an der Stelle dann überflüssig wäre.
 
X

Xyz1

Gast
"Immer" möglichst komplette Beispiele posten. Ich hab es einfach mal "verbessert":
Java:
public class List {

    private Element firstElement;

    public void add(int index, Payload p) {
        Element element = new Element(p);
        if (index == 0) {
            element.setNext(firstElement);
            firstElement = element;
        } else if (index > 0) {
            Element prev = getElementAt(index - 1);
            if (prev != null) {
                element.setNext(prev.getNext());
                prev.setNext(element);
            }
        }
    }

    private Element getElementAt(int index) {
        if (index >= 0) {
            Element node = firstElement;
            Element element = firstElement;
            for (int currPos = 0; currPos < index && element != null; currPos++) {
                element = element.getNext();
            }
            return element;
        } else {
            return null;
        }
    }

    private void removeAtIndex(int index) {
        if (index < 0) {
            return;
        }
        if (index == 0) {
            if (firstElement == null) {
                return;
            }
            firstElement = firstElement.getNext();
        } else {
            Element pointer = firstElement;
            while (index-- > 1) {
                pointer = pointer.getNext();
                if (pointer == null) {
                    return;
                }
            }
            if (pointer.getNext() == null) {
                return;
            }
            pointer.setNext(pointer.getNext().getNext());
        }
    }

    private void printAll() {
        int i = 0;
        Element e;
        while ((e = getElementAt(i)) != null) {
            System.out.println(i + ": " + e.p.s);
            i++;
        }
        System.out.println("");
    }

    public static void main(String[] args) {
        List liste = new List();

        liste.add(0, new Payload("a"));
        liste.printAll();

        liste.add(0, new Payload("b"));
        liste.printAll();

        liste.add(2, new Payload("d"));
        liste.printAll();

        liste.add(0, new Payload("c"));
        liste.printAll();

        liste.add(1, new Payload("e"));
        liste.printAll();

        liste.removeAtIndex(5);
        liste.printAll();

        liste.removeAtIndex(4);
        liste.printAll();

        liste.removeAtIndex(0);
        liste.printAll();

        liste.removeAtIndex(1);
        liste.printAll();
    }
}

class Element {

    Element next;
    Payload p;

    public Element(Payload p) {
        this.p = p;
    }

    public Element(Element next) {
        this.next = next;
    }

    public Element getNext() {
        return next;
    }

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

class Payload {

    String s;

    public Payload(String s) {
        this.s = s;
    }
}


Code:
0: a

0: b
1: a

0: b
1: a
2: d

0: c
1: b
2: a
3: d

0: c
1: e
2: b
3: a
4: d

0: c
1: e
2: b
3: a
4: d

0: c
1: e
2: b
3: a

0: e
1: b
2: a

0: e
1: a
Damit sollte aber alles geklärt sein, sonst fühl ich mich verarscht.

Edit: Doch nicht, wenn man e > 0 aus einer LEEREN Liste entfernen möchte, tritt noch eine NPE auf. :(

Aber ich glaube daran, du kannst das jetzt auch ohne unsere Hilfe.
 

Hacer

Aktives Mitglied
Ich wollte mit firstElement= pointer.getNext(); das erste Element durch das nächste ersetzen. Also so war es zu mindest gemeint :confused:
 

JStein52

Top Contributor
if (pointer.getNext() == null) {
return;
}
pointer.setNext(pointer.getNext().getNext());

Er schläft noch. ;);)
Aber du hast es soweit verstanden dass bei ihm nach der Schleife pointer auf das Element vor dem zu löschenden zeigt ? Mit der ersten Abfrage prüft er ob es dahinter überhaupt noch Elemente gibt falls jemand das 6.te von 5 Elementen löschen will.
Und anschliessend setzt er einfach den next-Zeiger auf das übernächste Element.
 

Hacer

Aktives Mitglied
@JStein52 erstmal vielen Dank jetzt verstehe ich was damit gemeint ist.:D:D und @DerWissende ich mache die Aufgaben eigentlich fast nur mit Stift und Papier und nur um meine Ergebnisse zu überprüfen, arbeite ich mit Eclipse.... aber vielen Dank!:D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Datentypen ArrayList.remove(index) hinterlässt leeres Feld Java Basics - Anfänger-Themen 5
krgewb remove in for Java Basics - Anfänger-Themen 5
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
D remove arraylist by id not work Java Basics - Anfänger-Themen 6
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
B Sorting List und Remove Java Basics - Anfänger-Themen 2
P Map - remove() ? Java Basics - Anfänger-Themen 46
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Vererbung remove elment from Array Java Basics - Anfänger-Themen 0
J easy remove method Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
U PriorityQueue remove Java Basics - Anfänger-Themen 2
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
B map.remove(long) Java Basics - Anfänger-Themen 5
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
B LinkedList remove Java Basics - Anfänger-Themen 5
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
D Wie Iterator Remove implementieren? Java Basics - Anfänger-Themen 11
W Treemap remove Java Basics - Anfänger-Themen 5
H Remove Methode von List Java Basics - Anfänger-Themen 6
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
S OOP ArrayList Klasse nachbauen, prob mit remove Java Basics - Anfänger-Themen 5
U ArrayList.remove(i) funktioniert nicht Java Basics - Anfänger-Themen 9
J Remove from an AraayList Java Basics - Anfänger-Themen 8
J Iterator remove()? Java Basics - Anfänger-Themen 5
T ArrayList#remove Java Basics - Anfänger-Themen 8
M ArrayList remove Element? Java Basics - Anfänger-Themen 3
B HashMap remove Java Basics - Anfänger-Themen 2
J TreeSet methode Remove Java Basics - Anfänger-Themen 13
C Add / Remove Panel Java Basics - Anfänger-Themen 2
J remove Problem Java Basics - Anfänger-Themen 8
M remove()-Methode eines Iterators Java Basics - Anfänger-Themen 3
megachucky remove bei Vector klappt nicht Java Basics - Anfänger-Themen 11
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
_so_far_away_ Fehlermeldung "Index 2 out of bounds for length 2" Java Basics - Anfänger-Themen 7
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
Baktash Index 0 out of bounds for length 0 Java Basics - Anfänger-Themen 5
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
JD_1998 Vektorrechner; User Input -> Index out of bounds Java Basics - Anfänger-Themen 3
H Bei forEach Index des Elements ermitteln Java Basics - Anfänger-Themen 17
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
S String index out of range Java Basics - Anfänger-Themen 11
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
J Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter Java Basics - Anfänger-Themen 4
J Fehler in Programm: Index -1 out of bounds for length 0 Java Basics - Anfänger-Themen 5
M Index of Array erweiteren Java Basics - Anfänger-Themen 24
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
L gerader Index im Array Java Basics - Anfänger-Themen 8
A ArrayList - size() nur nach bestimmtem index anzeigen lassen Java Basics - Anfänger-Themen 13
P String index out of range Java Basics - Anfänger-Themen 12
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
M Index out of range Java Basics - Anfänger-Themen 10
I String index out of range Fehlermeldung Java Basics - Anfänger-Themen 4
D " Column Index out of range, 6 > 5." Java Basics - Anfänger-Themen 8
S Index File bauen Java Basics - Anfänger-Themen 5
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
M Kleinsten Index in Array finden Java Basics - Anfänger-Themen 6
S kleinster Index der größten Komponente ? Java Basics - Anfänger-Themen 3
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
Z Erste Schritte String index out of range Java Basics - Anfänger-Themen 2
F Freier Index im Stringarray Java Basics - Anfänger-Themen 3
V Attribut aus aus jedem ArrayListen index auf Bildschirm ausgeben Java Basics - Anfänger-Themen 9
B Index out of bound exception. Warum? Java Basics - Anfänger-Themen 3
S string index out of range - es ergibt keinen Sinn Java Basics - Anfänger-Themen 6
E Arrayeintrag nach Index löschen und Array kürzen Java Basics - Anfänger-Themen 3
Ö Frage zu String index out of range: -1 Java Basics - Anfänger-Themen 12
T Index-Abfrage von Pi Java Basics - Anfänger-Themen 5
S Array - index von Benutzer eingegebenen char ausgeben Java Basics - Anfänger-Themen 3
X LinkedList - Index eines Objekts Java Basics - Anfänger-Themen 2
S Substring - String index out of range Java Basics - Anfänger-Themen 11
U buttonarray[this] anstatt buttonarray[index] ? Java Basics - Anfänger-Themen 12
D Annonyme Innere Klasse: Listen mit geradem Index ausgeben Java Basics - Anfänger-Themen 6
MiMa Array mit ungültigen Index ansprechen Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
V Methoden Verkettete Listen Index eines Elementes ausgeben Java Basics - Anfänger-Themen 10
F Fehler bei Array und Index Programmierung Java Basics - Anfänger-Themen 18
T Erste Schritte Java ein Array Feld[index] zurueckgeben? Java Basics - Anfänger-Themen 20
Luk10 Index bei 2 verschachtelten Schleifen Java Basics - Anfänger-Themen 2
C Klassen BubbleSort was passiert mit dem Index ? Java Basics - Anfänger-Themen 2
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
E Array bei Index ändern Java Basics - Anfänger-Themen 14
O Index Ermittlung Java Basics - Anfänger-Themen 20
C Felder(Größte Zahl, Index) Java Basics - Anfänger-Themen 6
M kurze frage: Ohne index.of position von string angeben Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben