www.mikrocontroller.net

Forum: PC-Programmierung LinkedList.size(), komisches Verhalten (Java)


Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    public static void sort(LinkedList<Fraction> list)
    {
        LinkedList sorted = new LinkedList();
        while(!list.isEmpty())
        {
            Fraction min = Fraction.takeMin(list);
            sorted.add(min); 
        }
        System.out.println("x1 "+ list.size());
        list = sorted;
        System.out.println("x2 "+ sorted.size());
        System.out.println("x3 "+ list.size());
    }
Die Methode sortiert eine Liste. Zuert wird eine neue Liste "sorted" 
erstellt und dann werden nach und nach aus der alten Liste "list" die 
kleinsten Objekte der Klasse "Fraction" rausgenommen und an "sorted" 
drangehöngt. Zum Schluß bekommt "list" die Referenz von "sorted". Die 
Testausgaben x1 = 0, x2 = 7 und x3 = 7 sind bei einer Beispielliste der 
Länge 7 korrekt. Die Liste "list" ist ja am Ende leer, da ich mit der 
Methode Fraction.takeMin(list) alle Objekte rausgenommen habe. Wenn ich 
nun diese Methode von irgendwo anders aufrufe, bekomme ich eine Liste 
der Länge 0 zurück. Ich kann mir das gar nicht erklären. Was passiert 
da? Ganz am Ende der Methode hat die Liste noch die Länge 7 und gleich 
danach 0. Merkwürdig ...

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Wenn ich "list" oder "sorted" mit return zurückgebe, hat die 
Liste Länge 7. Kann es sein, dass beim Beender der Methode alle Objekte 
aus den Listen aus irgendeinem Grund gelöscht werden?

Autor: Flocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfst Argumente in einer Methode nicht neu zuweisen, denn der 
Aufrufer bekommt von der neuen Referenz (Speicherstelle) nix mit. Darum 
arbeitet der Aufrufer nach der Methode immer noch mit der ersten Liste, 
die ja mittlerweile leer ist.

Per Rückgabewert geht es, wie du selbst ja schon herausgefunden hast.

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, das ergibt Sinn. Ein Ausweg ist dann, "list" wieder mit den 
Objekten von "sorted" zu füllen, dann komme ich auch ohnre return aus.

Danke!

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein viel besserer Ausweg ist die Collections API die dir die Möglichkeit 
gibt eine Liste einzugeben und diese sortiert zurückzuerhalten. Du mußt 
nur das Comparator Interface in deiner Klasse Fraction implementieren.
Vorteil ist, das du damit auf jedenfall schneller bist und du sparrst 
dir das ständige umkopieren.

Alterantiv kannst du auch die Sort Methode mit einem Komperator aufrufen 
falls dir das lieber ist.

http://java.sun.com/j2se/1.3/docs/api/java/util/Co...

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hoffe das ist irgendeine Uebung fuer die Schule... denn das Rad neu 
zu erfinden ist hier absolut nicht anzuraten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.