Prim: checkInvariant

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!
Vykyfikation
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 9. Mai 2017 12:44

Prim: checkInvariant

Beitrag von Vykyfikation » 22. Jun 2017 15:13

Hallo,
ich beiße mir grade an checkInvariant ein wenig die Zähne aus. In der Aufgabenstellung steht ja, man soll überprüfen, obfolgendes zutrifft:
  • nach i Iteration ist die größe des MST gleich i-1
  • nach i Iteration sind i Knoten besucht, solange nicht alle Knoten in visited sind
Ich habe das mit dem Code:

Code: Alles auswählen

{
    if(getVisited().size() != getIterations()) throw new InvalidInvariantException("blab");
    if(getMst().size()-1 !=  getIterations() ) throw new InvalidInvariantException("blub");
}
versucht, schaffe aber nur 1 von zwei Test. die zweite Abfrage scheint nicht richtig zu sein. Hat jemand eine Ahnung, was ich hier anders machen muss?
Der Errorcode ist wie so oft:

Code: Alles auswählen

    Testheadder – testMSTSizeVisitedSize(graph.algorithm.prim.PrimInvariantTest)

    Message – It seems like the method default throws the exception

Kabooom
Erstie
Erstie
Beiträge: 19
Registriert: 17. Jun 2017 15:04

Re: Prim: checkInvariant

Beitrag von Kabooom » 22. Jun 2017 19:05

Hallo Vykyfikation,

so wie ich es verstehe sollte man sich hier nicht nach der Aufgabenstellung sondern eher nach dem Javadoc richten. Ich hatte übrigens hier schonmal beschrieben, wie ich die Tests zum laufen bekommen habe: viewtopic.php?f=167&t=36362

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

Re: Prim: checkInvariant

Beitrag von LukasPhysiker » 22. Jun 2017 19:09

Hallo Vykyfikation,

dein Fehler ist einfach erstmal, dass du das -1 auf die falsche Seite gesetzt hast. getMst().size() soll i-1 sein, nicht i soll getMst().size()-1 sein. Ich habe dann aber mal deinen Code in korrigierter Form in die Aufgabe eingefügt und bekomme wieder den gleichen Fehler. Dann habe ich das mit meinem, funktionierenden Code verglichen:

Code: Alles auswählen

public void checkInvariant() throws InvalidInvariantException
{
    if(getMst().size() != getVisited().size()-1) throw new InvalidInvariantException();
    if(getVisited().size() != getIterations()) throw new InvalidInvariantException();
}
Um es kurz zu fassen, dies Aufgabe ist mal wieder total verbuggt, genau wie Dijkstra: invariant. Ob die Fehler kommen, kommt anscheinend darauf an, in welcher Reihenfolge du die beiden if-Abfragen machst und welche Seite links und rechts des Ungleichheitszeichens ist.

An Marcel Beuth und Tristan Wirth: Bitte korrigieren.

Antworten

Zurück zu „AuD: Programmieraufgaben“