Seite 1 von 1

[Codemonkeys] remove ArrayList: dynamic Test

Verfasst: 7. Mai 2017 18:42
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.

Re: [Codemonkeys] remove ArrayList: dynamic Test

Verfasst: 7. Mai 2017 19:26
von Julian Prommer
Habe die Rückmeldung des Tests präziser gemacht