Seite 1 von 1

Fehlersammlung

Verfasst: 9. Jul 2017 15:30
von Dadung
Hallo,


da mir immer wieder Fehler in den Aufgabenstellung über den Weg laufen, die z.T. hier im Forum angesprochen wurden, z.T. aber auch nicht und icht nicht mich dem Muster der sinnlos unkonstruktiven Kritik anschließen möchte, da ich noch Hoffnung habe, dass sich das nach und nach verbessern kann dachte ich, dass ich mal einen Thread einrichte, in dem einfach jeder Fehler, die er findet einbringen kann, damit diese zentral zu finden sind und so auch besser abgearbeitet werden können.


Ich fange an mit einem nicht so gravierenden Fehler, der aber unnötig Aufwand veruracht:
Es geht hierbei um die Aufgabe insertEdge (Graph)
Hier muss eine Methode für einen undirected Graph und eine für einen directed Graph implementiert werden.

Dabei steht leider nicht sofort ersichtlich in der Methodenbeschreibung, welches Methode 1 und welches Methode 2 ist. Da wäre es nett, wenn einfach (wie bei removeEdge) eine Zeile drüber stände, die die Klasse angibt und nicht bei beiden als Klasse abstractGraph stehen würde.

Außerdem fehlt meiner Meinung nach ein Halbsatz in der Methodenbeschreibung, der mir sagt, dass ich beim undirectedGraph die inverse Kante nicht in die Kantenliste einfügen muss, sondern es reicht, dass sie mit der "normalen" Kante verlinkt wird.




Ich hoffe, dass hier alle, die Fehler finden sie einfach nennen können, damit sie alle nach und nach abgebaut werden können.

Re: Fehlersammlung

Verfasst: 9. Jul 2017 18:00
von Dadung
bei Dijkstra komplett:

bei preProcess ist setDistance nicht in den erlaubten Methoden angegeben, obwohl die Methode notwendig und auch freigeschaltet ist.

Re: Fehlersammlung

Verfasst: 9. Jul 2017 19:35
von Dadung
Dijkstra komplett:

Invariant: warum ist die Reihenfolge der Abfragen relevant? und warum ist die Reihenfolge nicht die aus der Beschreibung, sonder 1-2-4-3

Re: Fehlersammlung

Verfasst: 11. Jul 2017 14:21
von GreenLightning
Graph: findNode (Zusammenfassung aus meinem anderen Thread.)

Test 1: "Reference implementation found other result than your implementation."

Das Problem ist, dass es bei diesem Test anscheinend mehrere korrekte Ergebnisse gibt und die Referenzimplementierung nur ein korrektes Ergebnis zurück gibt. Produziert der Code ein anderes Ergebnis, scheitert der Test, obwohl das Ergebnis korrekt war.

Test 2: "When the startNode argument is not part of the graph, the result is supposed to be null."

Hier muss die Methode getNodeList() verwendet werden, die in der Aufgabenstellung und Dokumentation überhaupt nicht erwähnt wird.

Re: Fehlersammlung

Verfasst: 11. Jul 2017 14:22
von GreenLightning
Dijkstra: invariant

Code: Alles auswählen

{
    if (priorityQueue.contains(sourceNode)) throw new InvalidInvariantException();
    if (settled.size() != iterations) throw new InvalidInvariantException();
    AbstractEdgeComparator c = getComparator();
    for (Node n : getGraph().getNodeList()) {
        if (settled.contains(n)) {
            if (c.compare(distances.get(n), c.getMax()) == 0) throw new InvalidInvariantException();
        } else if (!getPriorityQueue().contains(n)) {
            if (c.compare(distances.get(n), c.getMax()) != 0) throw new InvalidInvariantException();
        }
    }
}
Dieser Code ist komplett richtig, besteht aber keinen einzigen Test und erhält durchgängig die Fehlermeldung "It seems like the method default throws the exception", da so wie in der Aufgabenstellung beschrieben direkt auf die Felder zugegriffen wird.

Code: Alles auswählen

{
    getSourceNode();
    getPriorityQueue();
    getIterations();
    getDistances();
    getSettled();
    getComparator();
    throw new InvalidInvariantException(); 
}
Dieser Code besteht alle Tests, obwohl er genau das tut, was durch die "It seems like the method default throws the exception" Fehlermeldung verhindert werden soll.

Re: Fehlersammlung

Verfasst: 12. Jul 2017 13:21
von Dadung
Bei A* complete:

Bei mehreren Methoden (ich habe jetzt noch nicht alle durch) fehlen Methoden, die man benutzen darf und kann in der Auflistung. Besonders alles, was mit der distanceMap zu tun hat steht nirgendwo aufgelistet.

Re: Fehlersammlung

Verfasst: 12. Jul 2017 14:31
von Dadung
bei FloydWarshall:
Die Methode execute() verwendet die von Ihnen zu implementierenden Methoden preProcess(), checkBreakCondition(), doFunctionality() und executeInvariant() wie folgt:
Ablauf der Aufrufe der Methoden:
execute(){
  preProcess();
  while (checkBreakCondition()) {
   executeVariant();
   doFunctionality();
  } }
executeInvariant müsste executeVariant sein

Re: Fehlersammlung

Verfasst: 12. Jul 2017 17:09
von Dadung
bei Prim:
bei preProcess:
<li>the graph is directed</li>
soll geprüft werden, also sollen angeblich nur directedGraphs akzeptiert werden. (in der Aufgabensetllung steht undirected, schonmal inkonsistent)

Code: Alles auswählen

if (!(getGraph() instanceof DirectedGraph)) throw new InvalidInputException("undirected");
bringt 10 Tests zum scheitern, wenn man UndirectedGraph versucht wird einem gesagt, dass die Klasse nicht bekannt sei. Lässt man die Zeile ganz raus, läuft alles --> warum werden Dinge gefordert und dann nicht geprüft?

Re: Fehlersammlung

Verfasst: 18. Jul 2017 21:04
von SwiftRiverShark
Bei SelectionSort Iterative:

Ich hatte gestern Testat und habe einen Test nicht durchbekommen weil mein Code so aussah:

Code: Alles auswählen

{
    for (int i = array.length - 1; i >= 0; i--) {
        int maxPos = 0;
        for (int j = 1; j <= i; j++) {
            if (array[maxPos].compareTo(array[j]) < 0) {
                maxPos = j;
            }
        }
        Listobject<T> tmp = array[i];
        array[i] = array[maxPos];
        array[maxPos] = tmp;
    }
    return array;
}
"Triangle-change was wrong. Test failed at iteration with index: 0 expected:<23> but was:<41>"
- kam hier schon mehrmals im Forum vor.

10 / 10 Test laufen durch wenn man statt

Code: Alles auswählen

if (array[maxPos].compareTo(array[j]) < 0)
schreibt:

Code: Alles auswählen

if (array[j].compareTo(array[maxPos]) > 0) 
Allerdings ist mir schleierhaft wieso das einen Unterschied macht. a < b oder b > a sind völlig äquivalent

Re: Fehlersammlung

Verfasst: 19. Jul 2017 11:56
von SophiaLi1
Danke für den Hinweis! Ich hab morgen mein Testat und das wäre eine Stolperfalle :roll:

Re: Fehlersammlung

Verfasst: 19. Jul 2017 14:53
von SophiaLi1
Bei removeNode:

Die Methode Node.getFanIn() steht nicht bei Node, sondern bei this.

Re: Fehlersammlung

Verfasst: 19. Jul 2017 15:16
von SophiaLi1
Bei findNode:

Man muss zu Beginn prüfen, ob der Startknoten überhaupt im Graphen enthalten ist. Das macht man mit

Code: Alles auswählen

 if (startNode == null || data == null || !getNodeList().contains(startNode))
        return null;
Die Methode getNodeList() und ihre Methode contains() sind allerdings nicht in den verfügbaren Methoden aufgeführt.

Re: Fehlersammlung

Verfasst: 19. Jul 2017 22:07
von SophiaLi1
Bei Prim preProcess:
- Die PriorityQueque muss über setPriorityQueue(new PriorityQueue<Edge<N, E>>(getQueueComparator())); initialisiert werden.
Nirgends (weder in der Beschreibung noch in den erlaubten Methoden steht aber, dass es getQueueComparator() gibt oder wie der Konstruktor von der PriorityQueue lautet!
- getVisited() fehlt bei den erlaubten Methoden.

Bei Prim checkBreakCondition:
In den erlaubten Methoden fehlt getPriorityQueue(), was man auch zwingend benötigt.