Seite 1 von 1

Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 5. Mai 2017 11:56
von DerMathematiker
Hallo,
bei der Aufgabe "contains on ArrayList based LinkedList" passt die Aufgabenstellung nicht zu dem, was der Titel der Aufgabe fordert.
Es heißt:
Array list - insert At position
In dieser Aufgabenstellung sollen Sie eine Funktion von Arraylist implementieren.

Diese Form der Arraylist ist eine LinkedList, welche Arrays, die jeweils in einem Wrap eingebaut wurden, speichert. Der Wrap um die Arrays bietet verschiedene Methoden zur besseren Handhabung des Arrays.
Die Motivation für Arraylists liegt in der besseren und sicheren Handhabung gegenüber Arrays. Diese Implementierung ist ähnlich zu der im Algowiki.
insertAtPosition
Mit der Methode insertAtposition soll versucht werden ein Object der Klasse T an eine bestimmte Position in der ArrayList einzufügen.
Hinweis: Achten Sie auf die unterschiedlichen Fälle die auftreten können! Machen Sie sich diese klar in dem sie den Algo Wiki Link folgen.

Parameter
T key ist ein Element, das in die ArrayList eingefügt werden soll.
int pos ist die Position in die das Element eingefügt werden soll.
Rückgabe: gibt true zurück bei erfolgreichem Einfügen, ansonsten false.
Randbedingungen
Ist das Array im Attribut head leer, dann soll der Wert auf Index 0 eingefügt werden.
Ist das Array voll muss es vorher gesplittet werden. Bsp. a,b,c,d -> (a,b) und (c,d)
Mit der Methode getFirst() wird der Kopf der LinkedList aufgerufen.
Ist das Attribut head mit einer Null-Referenz belegt, dann soll false zurückgeliefert werden.
Anforderungen an die Implementation
Die Methoden sollen iterativ implementiert werden.
Auch der Methodenkopf ist falsch angegeben:

Code: Alles auswählen

public boolean insertAtPosition(int pos, Listobject<T> key)
Ich hoffe, dass die Fehler bis zum Start der Testate in der nächsten Woche behoben werden!

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 5. Mai 2017 14:41
von Julian Prommer
Aufgabe erneuert.

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 6. Mai 2017 14:05
von hallo6
Ist es möglich, dass die Tests nicht richtig funktionieren? Bei meiner Implementierung ändert sich die Anzahl bestandener Tests bei wiederholtem durchlaufen lassen je nachdem wie sie lustig ist bei gleichbleibendem Quellcode von 3 auf 4 und dann mal wieder zurück.

Die Testausgabe:
Failurereport
Testheadder – find_emptyList(array_List.tests_basicOperations.ArrayList_Test_contains)
Message – test timed out after 20 milliseconds

Failurereport
Testheadder – find_end(array_List.tests_basicOperations.ArrayList_Test_contains)
Message – Your method must be wrong. ArrayListElement method getData() has to be called 10 times for the last ArrayListElement. Your method couldnt find 20 in a list {(1,2,3,4,5),(6,7,8,9,10),(11,12,13,14,15,16,17,18,19,20)}

Failurereport
Testheadder – find_middle(array_List.tests_basicOperations.ArrayList_Test_contains)
Message – Your method must be wrong. ArrayListElement method getData() has to be called 3 times from the second ArrayListElement. Your method couldnt find 20 in a list {(1,2,3,4,5),(6,7,8,9,10),(11,12,13,14,15,16,17,18,19,20)}
Der erste ist dabei der, welcher eine Identitätskrise hat... :roll:

Warum die anderen Tests nicht durchlaufen verstehe ich auch nicht. :lol:

Meine Implementation:

Code: Alles auswählen

{
    if(getFirst() == null || getFirst().getN() == 0) return false;
    if(data == null) return false;
    
    ArrayListElement<T> pointer = getFirst();
    Listobject<T>[] aktuellerDatensatz;
    while(pointer != null){
        aktuellerDatensatz = pointer.getData();
        for (int n = 0; n < pointer.getN(); n++){
            if (data == aktuellerDatensatz[n].getData()){
                return true;
            }
        }
        pointer = pointer.getNext();
    }
    return false;
}

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 7. Mai 2017 14:26
von LukasPhysiker
Hallo hallo6,

ich habe genau die gleichen Fehlermeldungen. Hier ist mein Code:

Code: Alles auswählen

{
    if(data == null) return false;
    ArrayListElement<T> first = getFirst();
    if(first == null) return false;
    
    Listobject<T>[] listobject;
    int n;
    for(ArrayListElement<T> el = first; el != null; el = el.getNext())
    {
        n = el.getN();
        if(n == 0) continue;
        listobject = el.getData();
        if(listobject == null) continue;
        for(int i = 0; i < n; i++)
        {
            if(listobject[i].getData() == data) return true;
        }
    }
    return false;
}
Meiner Meinung nach sollten beide Codes funktionieren. Die Timeout-Fehlermeldung kommt halt deswegen nur manchmal, weil der Server manchmal mehr ausgelastet ist (d.h. die Timeout-Zeit ist zu niedrig!). Die anderen Fehlermeldungen kommen mir bekannt vor. Die sollen wohl zählen, wie oft Methoden aufgerufen werden. Hier wird zumindest noch behauptet, dass konkrete Beispiele nicht gefunden worden seien (ich sehe aber nicht, wie das bei dem Beispiel nicht gehen soll), aber das Zählen mit den Methoden ist schon in einer anderen Aufgabe schief gegangen, wie man in diesem Thread lesen kann:
viewtopic.php?f=167&t=36031

D.h. meiner Meinung nach sind die Tests einfach fehlerhaft! Das sollte behoben werden, bevor die Testate anfangen!

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 7. Mai 2017 19:46
von Julian Prommer
Die timeouts wurden ein wenig gelockert...

Wenn die erste Exception fliegt, wird der Rest langsamer...
Ansonsten bin ich der Meinung, dass keine Fehler vorliegen...

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 7. Mai 2017 23:28
von LukasPhysiker
Hallo Herr Prommer,

danke für das Anpassen der Timeouts. Verstehe ich das richtig, dass Sie der Meinung sind, dass die hier geposteten Codes tatsächlich fehlerhaft sind und die Fehlermeldungen daher gerechtfertigt sind? In dem Fall, könnten Sie bitte einen Tipp geben, wo der Fehler liegt?

In jedem Fall, können Sie bitte auch im anderen Thread Stellung dazu nehmen:
viewtopic.php?f=167&t=36031

Dort bin ich mir nämlich zu 99,9% sicher, dass der Code richtig ist, ich habe ihn ja auch mit Eclipse getestet und er ist übersichtlich genug, dass ich nicht glaube, dass dort ein Fehler versteckt sein könnte.

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 9. Mai 2017 09:49
von Julian Prommer
Och die Tests sind nicht fehlerhaft an der Stelle sondern ein wenig zu streng ;)

Problem verstanden, wird nicht verraten, aber gefixed ;)

Re: Codemonkeys: contains on ArrayList based LinkedList

Verfasst: 9. Mai 2017 10:03
von Julian Prommer
so gefixed