tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
1079
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    I2oxxi I2oxxi ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    20
    ändert leider nix, immernoch gleiche ausgabe.
    wäre mid -1 ja aber auch unlogisch der index fängt ja bei 0 an, und wenn man 0 übergibt wäre for(int i=0; i < 0-1;i++), womit die schleife übersprungen wird, genau wie bei index 1.
    wie gesagt, das problem ist nicht outofbounds.
    ich hab da grad ne idee, das das alles nicht klappt weils über nen start pointer läuft, ich versuch grad was umzubauen das ein hilfsobjekt erstellt wird, das sich wie start verhält, und das es dann dadrüber die schleife durchgeht
    Geändert von I2oxxi (19.01.12 um 12:08 Uhr)
     

  2. #17
    CPoly CPoly ist gerade online Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ich rate ja nicht rum. Ich kann es mit den Änderungen kompilieren, Elemente einfügen und bekomme die korrekte Anzahl ausgegeben.
     

  3. #18
    I2oxxi I2oxxi ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    20
    hm also ich hab deins übernommen und bekam immernoch die falsche anzahl.
    jedoch habe ich es jetzt so umgeschrieben, das es bei mir funktioniert:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
        public boolean add(T element)
        {
            ListenElement<T> elementInList = this.start;
            if(elementInList==null)
            {
                this.start = new ListenElement<T>(element);
                this.start.setNachfolger(null);
                this.start.setVorgänger(null);
            }
            else
            {
                while(elementInList.getNachfolger()!=null)
                {
                    elementInList=elementInList.getNachfolger();
                }
                ListenElement<T> myElement = new ListenElement<T>(element);
                myElement.setNachfolger(null);
                myElement.setVorgänger(elementInList);
                elementInList.setNachfolger(myElement);
            }
            
            return true;
        }


    Edit:: meine add(index,obj) klappt jetzt auch, da konnte ich dine index-1 gebrauchen
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
        public void add(int index, T element)
        {
            ListenElement<T> elementInList = this.start;
            if(index==0)
            {
                if(elementInList==null)
                {
                    this.start = new ListenElement<T>(element);
                    this.start.setNachfolger(null);
                    this.start.setVorgänger(null);
                }
                else
                {
                    ListenElement<T> hilfselement = new ListenElement<T>(this.start.getObj());
                    
                    hilfselement.setNachfolger(this.start.getNachfolger());
                    hilfselement.setVorgänger(this.start);
                    this.start.setObj(element);
                    this.start.setVorgänger(null);
                    this.start.setNachfolger(hilfselement);
                    
                    
                    
                }
            }
            else if(index==1)
            {
                ListenElement<T> myElement = new ListenElement<T>(element);
                myElement.setVorgänger(this.start);
                myElement.setNachfolger(this.start.getNachfolger());
                if(this.start.getNachfolger()!=null)
                {
                    this.start.getNachfolger().setVorgänger(myElement);
                }
                this.start.setNachfolger(myElement);
            }
            else
            {
                for(int i=0; i<index-1; i++)
                {
                    elementInList=elementInList.getNachfolger();
                }
                ListenElement<T> myElement = new ListenElement<T>(element);
                myElement.setVorgänger(elementInList);
                if(elementInList.getNachfolger()==null)
                {
                    myElement.setNachfolger(null);
                }
                else
                {
                    myElement.setNachfolger(elementInList.getNachfolger());
                    elementInList.getNachfolger().setVorgänger(myElement);
                }
                elementInList.setNachfolger(myElement);
                
            }
            
        }

    Edit2::
    Ich hab da nochmal ne ganz Java spezifische frage. clear soll ja die liste löschen. Wie läuft das jetzt mit dem Garbage Collector ab? Objekte kann man ja nicht selbs löschen, richtig?
    heißt, für clear muss ich eigentlich nur start=null machen, und da so keine verbindungmehr besteht, da der startpointer leer is wird ja die ganze liste leer, die objekte werden dann von allein gelöscht da sie nicht mehr genutzt werden?


    Edit::
    Ok, ich habe jetzt alle methoden fertig und alles klappt, das einzige was zu fehlern in der liste führt ist wenn ich add(0,obj) mache, wenn schon ein objekt auf null liegt, also das objekt an die erste stelle gesetzt werden soll (als start) und dann das vorherige start element folgt.
    bei 0 klappt iwas nicht da verhaut der mir die ganze liste.
    ist jetzt nur der ausschnitt für den fall 0, hab ja mit if ein paar sonderfälle extra behandelt
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    public void add(int index, T element)
        {
            ListenElement<T> elementInList = this.start;
            if(index==0)
            {
                if(elementInList==null)
                {
                    this.start = new ListenElement<T>(element);
                    this.start.setNachfolger(null);
                    this.start.setVorgänger(null);
                }
                else
                {
                    elementInList=new ListenElement<T>(this.start.getObj());
                    elementInList.setNachfolger(this.start.getNachfolger());
                    this.start.setObj(element);
                    this.start.setNachfolger(elementInList);
                    this.start.setVorgänger(null);
                    elementInList.setVorgänger(this.start);
                }
            }
        }
    eigentlich kommen halt noch fall für index=1 und index > 1 aber das hab ich jetz mal weggelassen, das funktioniert alles. nur bei add(0,obj) wenn schon was auf 0 existiert nicht .... also muss der fehler in dem else block liegen. hab auch schon mit this.start = new ListenElement<T>(element); versucht aber des klappt au nich, da verhauts mir auch die liste
    Geändert von I2oxxi (19.01.12 um 21:47 Uhr)
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 12.01.12, 12:30
  2. Antworten: 10
    Letzter Beitrag: 14.03.11, 08:20
  3. Antworten: 3
    Letzter Beitrag: 30.07.10, 13:46
  4. Antworten: 5
    Letzter Beitrag: 10.03.09, 20:55
  5. Inhalt einer ArrayList in andere ArrayList kopieren
    Von Pierre im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 05.07.05, 16:58