Codemonkeys: contains on ArrayList based LinkedList

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!
DerMathematiker
Neuling
Neuling
Beiträge: 8
Registriert: 27. Apr 2017 14:52

Codemonkeys: contains on ArrayList based LinkedList

Beitrag 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!

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

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag von Julian Prommer »

Aufgabe erneuert.
AuD Orga

hallo6
Erstie
Erstie
Beiträge: 14
Registriert: 4. Mai 2017 10:36

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag 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;
}

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag 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!

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

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag 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...
AuD Orga

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag 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.

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

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag von Julian Prommer »

Och die Tests sind nicht fehlerhaft an der Stelle sondern ein wenig zu streng ;)

Problem verstanden, wird nicht verraten, aber gefixed ;)
AuD Orga

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

Re: Codemonkeys: contains on ArrayList based LinkedList

Beitrag von Julian Prommer »

so gefixed
AuD Orga

Antworten

Zurück zu „AuD: Programmieraufgaben“