[Codemonkeys] remove ArrayList: dynamic Test

Bei Postings zu Aufgabe Nr. x = 1..4 lassen Sie Ihr Betreff bitte mit "x: " beginnen, gefolgt von einer möglichst präzisen Überschrift, danke!

Moderator: Algorithmen und Datenstrukturen

Forumsregeln
Bei Postings zu Aufgabe Nr. x = 1..4 lassen Sie Ihr Betreff bitte mit "x: " beginnen, gefolgt von einer möglichst präzisen Überschrift, danke!
hallo6
Erstie
Erstie
Beiträge: 14
Registriert: 4. Mai 2017 10:36

[Codemonkeys] remove ArrayList: dynamic Test

Beitrag von hallo6 »

Hallo,

bei mir schlägt noch der dynamic Test fehl und ich finde nicht raus wieso, da ich nur zwei Stellen habe, wo decN() aufgerufen wird und die meines Erachtens nach richtig funktionieren.

Meine Fehlermeldung lautet:
Failurereport
Testheadder – dynamic(array_List.tests_basicOperations.ArrayList_Test_remove)
Message – ArrayListElement at index: 1 has a wrong amount of items. expected:<6> but was:<5>
Trace – java.lang.AssertionError: ...
Meine Implementation:

Code: Alles auswählen

{
    if (i< 0) return false;
    if (getFirst().getN()==0) return false;
    
    ArrayListElement<T> pointer = getFirst();
    
    // im ersten ArrayListElement Löschen
    if (pointer.getN()>=i+1){
        pointer.getData()[i] = null;
        // Elemente hochziehen, wenn vorhanden
        for (int n = i; n< pointer.getN()-1; n++){
            pointer.getData()[n] = pointer.getData() [n+1];
            pointer.getData()[n+1] = null;
        }
        pointer.decN();
        return true;
    }
    // nächste ArrayListElemente überprüfen
    i -= pointer.getN();
    if (pointer.getNext() == null) return false;
    //Finde die richtige Position in der ArrayList
    // am Ende der while schleife ist der pointer ein Element vor dem Element, in dem zu löschen ist
    // falls der Idx zu hoch (es keine ArrayListElemente) mehr gibt, wird false zurück gegeben
    while (pointer.getNext().getN()<i+1){
        i -= pointer.getNext().getN();
        if (pointer.getNext().getNext()==null)
            return false;
        pointer = pointer.getNext();
    }
    
    // das Ganze Element kann gelöscht werden
    if (pointer.getNext().getN()==1){
        pointer.setNext(pointer.getNext().getNext());
    } else {
        // Wert an der Stelle i wird gelöscht und nachfolgende Werte werden nach oben verschoben
        pointer.getNext().getData()[i] = null;
        for (int n = i; n< pointer.getNext().getN()-1; n++){
            pointer.getNext().getData()[n] = pointer.getNext().getData()[n+1];
            pointer.getNext().getData()[n+1] = null;
        }
        pointer.getNext().decN();
    }
    return true;
}
Vielen Dank für Antworten im Vorraus.

Julian Prommer
Moderator
Moderator
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: [Codemonkeys] remove ArrayList: dynamic Test

Beitrag von Julian Prommer »

Habe die Rückmeldung des Tests präziser gemacht
AuD Orga

Antworten

Zurück zu „AuD: Programmieraufgaben“