Singly Linked List: Einfügen von Elementen (insert) - size() was called less times than expected

pacman120
Neuling
Neuling
Beiträge: 1
Registriert: 10. Jul 2017 15:17

Singly Linked List: Einfügen von Elementen (insert) - size() was called less times than expected

Beitrag von pacman120 » 10. Jul 2017 15:56

Hallo,

ich habe einige Probleme beim bearbeiten dieser Aufgabe.
Zunächst ist mir aufgefallen, dass die Tests in der vergangenen Nacht geändert wurden, sodass mein Code, der gestern noch 22/30 Tests bestanden hat, heute gar keinen mehr besteht.

Nun fügt mein neuer Code laut Testausgabe zwar korrekt ein, allerdings werden nur 15/24 Test erfolgreich bestanden. 7x wird bemängelt die Methode size() würde nicht genug oft aufgerufen werden, 2x die selbe Meldung mit Methode getFirst().

Ich habe den Code extra dahingehend geändert, dass Methode size() nun für jedes Listenelement von el einmal aufgerufen wird.
Für Methode getFirst() habe ich weder sinnvolle noch sinnfreie Ideen zur häufigeren Verwendung.
Könnte es sein, dass die Test nicht korrekt arbeiten bzw eine fehlerhafte Beschreibung haben?

Außerdem möchte ich die Verantwortlichen darauf hinweisen, dass es sehr ärgerlich ist nach wochenlanger Vorbereitung feststellen zu müssen, dass Testfälle und Anforderungen an die Algorithmen über Nacht geändert werden, ohne dass dies mit den Studierenden kommuniziert wird.
Besonders in eine Prüfungssituation könnte diese Erkenntnis zu erhöhtem Stress und Verunsicherung führen.

Anbei noch mein Code:

Code: Alles auswählen

{
    if(el == null || idx < 0 || idx > size())
        return false;
        
    //am Anfang der Liste einfügen
    if(idx==0){
        return insertFirst(el);
    }
    
    // am Ende der Liste einfügen
    if(idx == size()){
        return insertLast(el);
    }
        
    ListElement<T> p1 = el;
    ListElement<T> p2 = p1;
    int elemCounter = 0;
    
    //überprüfe ob el einen Loop enthält
    while(p1.hasNext()){
        p2=p1;
        while(p2.hasNext()){
            if(p2.next().equals(p1)){
                return false;
            }
            p2=p2.next();
        }
        p1=p1.next();
    }
    
    p1=el;
    
    if(contains(p1)){
        return false;
    }
    // p1 kann eingefügt werden:
    setSize(size() + 1);
     
    //überprüfe ob Listenelemente von el in der Liste in die eingefügt werden soll bereits vorhanden sind
    // zähle el, setze p1 auf letzes element
    while(p1.hasNext()){
        if(contains(p1.next())){
            return false;
        }
        setSize(size() + 1);
        p1=p1.next();
    }
    
    
    
    //mitten in Liste einfügen
    p2 = getFirst();
    int positionP2 = 0;
    
    //p2 auf richtige position bringen(element, welches als nächstes el bekommen soll)
    while(idx - 1 > positionP2){
        p2 = p2.next();
        positionP2 += 1;
    }
    
    ListElement<T> p3 = p2.next();
    
    p2.setNext(el);
    p1.setNext(p3);
    
    
    return true;
}
Und die Testbeschreibungen:
Junitreport
Time – 118
Testcount – 24
Failurecount – 9
Ignorerecount – 0
Failurereport
Testheadder – dynamic_01_Insertion_of_the_null_element_in_the_list_containing_one_element(singly_linked_list.insert.test_insert.LinkedList_insert_dyn)
Message – List before operation: (|el-0|) Expected list after operation: (|el-0|) Real list after operation: (|el-0|) either "size()" was called less times than expected
Trace
Failurereport
Testheadder – dynamic_10_Insertion_with_loop_of_a_non_null_non_single_element_in_the_list_containing_more_than_one_element(singly_linked_list.insert.test_insert.LinkedList_insert_dyn)
Message – List before operation: (|el-3|el-5|el-4|el-1|el-8|el-0|el-6|el-2|el-9|el-7|) Expected list after operation: (|el-3|el-5|el-4|el-1|el-8|el-0|el-6|el-2|el-9|el-7|) Real list after operation: (|el-3|el-5|el-4|el-1|el-8|el-0|el-6|el-2|el-9|el-7|) either "size()" was called less times than expected
Trace
Failurereport
Testheadder – dynamic_08_Insertion_with_repetitions_of_a_non_null_non_single_element_in_the_list(singly_linked_list.insert.test_insert.LinkedList_insert_dyn)
Message – List before operation: (|el-0|el-14|el-15|el-16|el-17|el-3|el-8|el-7|el-2|el-5|el-9|el-4|el-1|el-6|) Expected list after operation: (|el-0|el-14|el-15|el-16|el-17|el-3|el-8|el-7|el-2|el-5|el-9|el-4|el-1|el-6|) Real list after operation: (|el-0|el-14|el-15|el-16|el-17|el-3|el-8|el-7|el-2|el-5|el-9|el-4|el-1|el-6|) "getFirst()" was called less times than expected
Trace
Failurereport
Testheadder – dynamic_02_Insertion_of_the_null_element_in_the_list_containing_more_than_one_element(singly_linked_list.insert.test_insert.LinkedList_insert_dyn)
Message – List before operation: (|el-6|el-0|el-8|el-4|el-5|el-3|el-1|el-2|el-7|el-9|) Expected list after operation: (|el-6|el-0|el-8|el-4|el-5|el-3|el-1|el-2|el-7|el-9|) Real list after operation: (|el-6|el-0|el-8|el-4|el-5|el-3|el-1|el-2|el-7|el-9|) either "size()" was called less times than expected
Trace
Failurereport
Testheadder – basic_14_Insertion_with_loop_of_a_non_null_non_single_element_in_the_list_containing_more_than_one_element(singly_linked_list.insert.test_insert.LinkedList_insert)
Message – List before operation: (|el-0|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) Expected list after operation: (|el-0|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) Real list after operation: (|el-0|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) either "size()" was called less times than expected
Trace
Failurereport
Testheadder – basic_02_Insertion_of_the_null_element_in_the_list_containing_one_element(singly_linked_list.insert.test_insert.LinkedList_insert)
Message – List before operation: (|el-0|) Expected list after operation: (|el-0|) Real list after operation: (|el-0|) either "size()" was called less times than expected
Trace
Failurereport
Testheadder – basic_03_Insertion_of_the_null_element_in_the_list_containing_more_than_one_element(singly_linked_list.insert.test_insert.LinkedList_insert)
Message – List before operation: (|el-0|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) Expected list after operation: (|el-0|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) Real list after operation: (|el-0|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) either "size()" was called less times than expected
Trace
Failurereport
Testheadder – basic_11_Insertion_with_repetitions_of_a_non_null_non_single_element_in_the_list(singly_linked_list.insert.test_insert.LinkedList_insert)
Message – List before operation: (|el-0|el-14|el-15|el-16|el-17|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) Expected list after operation: (|el-0|el-14|el-15|el-16|el-17|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) Real list after operation: (|el-0|el-14|el-15|el-16|el-17|el-1|el-2|el-3|el-4|el-5|el-6|el-7|el-8|el-9|) "getFirst()" was called less times than expected
Trace
Failurereport
Testheadder – basic_01_Insertion_of_the_null_element_in_the_empty_list(singly_linked_list.insert.test_insert.LinkedList_insert)
Message – List before operation: () Expected list after operation: () Real list after operation: () either "size()" was called less times than expected
Trace

Vielen dank schonmal für eure Hilfe.

Dadung
Windoof-User
Windoof-User
Beiträge: 29
Registriert: 7. Mai 2017 13:08

Re: Singly Linked List: Einfügen von Elementen (insert) - size() was called less times than expected

Beitrag von Dadung » 11. Jul 2017 12:12

Hallo,

ich meine es gäbe für diese Aufgabe irgendwo im Forum eine funktionierende Lösung, aber das müsstest du selber suchen. Leider habe ich meine nicht mehr.

Zu den Tests:
Es kommt hin und wieder vor, dass da steht man habe eine Methode zu selten aufgerufen, obwohl es eigentlich zu oft war. Daher würde ich dir empfehlen mal zu probieren das auf einen einzigen Aufruf zu begrenzen und irgendwo zu speichern.

loop Überprüfung und bereits enthalten Überprüfung kannst du in einer Schleife unterbringen, damit halbierst du die notwendigen Aufrufe von next()

Außerdem kannst du meiner Meinung nach die Zahl deiner Zeiger reduzieren auf:
1. el als pointer auf das erste Element behalten
2. p1 als Pointer auf das letzte Element (bei loop Überprüfung/bereits enthalten überprüfung am Ende behalten)
3. p2 als Pointer zum durchiterieren der Liste, in die eingefügt wird


so zu getFirst():
Möglicherweise wird erwartet, dass du eine eigene Behandlung für den Fall hast, dass getFirst() == null
Also in der Art:

Code: Alles auswählen

ListElement<T> p2 = getFirst();
if (p2 == null){
setFirst(el);
setLast(p1);
return true;
Das müsste möglicherweise noch vor der Bearbeitung der beiden "normalen" Randfälle kommen, so dass auch bei idx == 0 getFirst() aufgerufen werden muss.
Das sind jetzt aber nur Spekulationen, genau kann ich dir das nicht sagen.

xsdfisndv
Neuling
Neuling
Beiträge: 2
Registriert: 25. Jun 2017 20:56

Re: Singly Linked List: Einfügen von Elementen (insert) - size() was called less times than expected

Beitrag von xsdfisndv » 11. Jul 2017 20:46

Also mir ist auch aufgefallen, dass beinahe alle Tests für die ganzen singly linked lists Aufgaben geändert wurden. Ich habe vor 2 Monaten alle Aufgaben einmal gemacht und alle Tests bestanden, aber jetzt bestehen sie nur noch die Hälfte der Test, da wie beim OP size() oder getLast() nicht genug benutzt wurden. Zum Beispiel bei der Aufgabe get muss getLast() paar mal aufgerufen werden, obwohl es Lösungen gibt, bei der man getLast() nicht einmal öffnen muss.

Die Funktionsnamen dieser Aufgaben wurden auch geändert nun haben sie alle am Ende ein "_exe" angehangen bekommen.

Antworten

Zurück zu „Archiv“