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);
}
}
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.
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 ?
hat aber etwas gedauert, die Fehler an mehreren Stellen zu finden. Ich hab dir auch eine PN geschickt, in der ich erklären kann, falls noch nicht verstnaden.
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.
Dann würde sie eher getMischt() heissen. Ausserdem schimpfe ich gar nicht. Und gibs zu, mehr als die genannten drei Informationen hast du auch nicht benutzt
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.
Funktioniert es wirklich ?? Wenn ich das richtig sehe zeigt bei dir jetzt pointer nach der while-Schleife auf das Element an der Position die gelöscht werden soll oder ? Und dort veränderst du den next. Du musst aber bei dem Element davor den next ändern !
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.
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.
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.
@DerWissende hallo ich habe mir gestern mal deine Lösung angeguckt und versucht es nachzuvollziehen, doch ich verstehe nicht, was du nach der while-Schleife machst.
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.
@DerWissende hallo ich habe mir gestern mal deine Lösung angeguckt und versucht es nachzuvollziehen, doch ich verstehe nicht, was du nach der while-Schleife machst.
@JStein52 erstmal vielen Dank jetzt verstehe ich was damit gemeint ist. 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!