Fehlersammlung

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

Fehlersammlung

Beitrag von Dadung » 9. Jul 2017 15:30

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.

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

Re: Fehlersammlung

Beitrag von Dadung » 9. Jul 2017 18:00

bei Dijkstra komplett:

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

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

Re: Fehlersammlung

Beitrag von Dadung » 9. Jul 2017 19:35

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

Benutzeravatar
GreenLightning
Neuling
Neuling
Beiträge: 5
Registriert: 20. Apr 2017 16:32

Re: Fehlersammlung

Beitrag von GreenLightning » 11. Jul 2017 14:21

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.

Benutzeravatar
GreenLightning
Neuling
Neuling
Beiträge: 5
Registriert: 20. Apr 2017 16:32

Re: Fehlersammlung

Beitrag von GreenLightning » 11. Jul 2017 14:22

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.

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

Re: Fehlersammlung

Beitrag von Dadung » 12. Jul 2017 13:21

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.

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

Re: Fehlersammlung

Beitrag von Dadung » 12. Jul 2017 14:31

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

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

Re: Fehlersammlung

Beitrag von Dadung » 12. Jul 2017 17:09

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?

SwiftRiverShark
Neuling
Neuling
Beiträge: 3
Registriert: 15. Jun 2017 10:56

Re: Fehlersammlung

Beitrag von SwiftRiverShark » 18. Jul 2017 21:04

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

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Fehlersammlung

Beitrag von SophiaLi1 » 19. Jul 2017 11:56

Danke für den Hinweis! Ich hab morgen mein Testat und das wäre eine Stolperfalle :roll:

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Fehlersammlung

Beitrag von SophiaLi1 » 19. Jul 2017 14:53

Bei removeNode:

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

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Fehlersammlung

Beitrag von SophiaLi1 » 19. Jul 2017 15:16

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.
Zuletzt geändert von SophiaLi1 am 19. Jul 2017 22:07, insgesamt 1-mal geändert.

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Fehlersammlung

Beitrag von SophiaLi1 » 19. Jul 2017 22:07

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.

Antworten

Zurück zu „Archiv“