Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Testcases 6.2 Verbunddatentypen
Ein paar Testcases für die Aufgabe 6.2: https://wwwcip.informatik.uni-erlangen.de/~xu76puwe/aud-testcases/VectorNDTest.java
Super! Danke fuer deinen Test. Bei mir hat er schon mal funktioniert.
Ich bekomme nur einen Success wenn ich in der Methode getDimension() nicht beachte (meine Prüfung also auskommentiere), dass noch nicht initialisierte Vektoren zur Rückgabe von 0 führen sollen ![]()
Oder hab ich da nun was falsch in der Angabe verstanden?
Achja, Danke für die Tests!
Ist in diesem Fall mit initialisiert gemeint, dass es noch nicht mit der Methode init gefüllt wurde oder das noch kein Konstruktor aufgerufen wurde ?!?
Danke! Habe ich in der Aufgabe übersehen. Ich werde die Tests direkt mal aktualisieren.
Kann es sein, dass die Aufgabenstellung etwas undeutlich ist?
Wir speichern das Array doch als Instanzvariablen ab, oder? (Ich geh mal davon aus, alles andere wuerde kaum Sinn ergeben) Demnach wird das Array default initialisiert. Das wuerde dann aber bedeuten, dass der Fall, das Array sei uninitialisiert, auf den sich die Aufgabe bezieht, nie auftritt.
Also ist die Frage: Wird sich mit der Einschraenkung in getDimensions() auf die Java-Initialisierung bezogen oder aber auf die manuelle init(double[])?
Die Frage gab es ja auch in einem anderen Thread. Ich habe mir gerade das Skeleton nochmal angesehen. Bedenkt, dass das data-Array public ist und überlegt euch, was das für die Initialisierung dieses Arrays bedeuten kann.
Ich will ja nicht unhoeflich sein, aber deine Antwort ist ungefaehr so vage wie die Aufgabenstellung ![]()
(Die letzte Zeile entspricht meiner neusten Erkenntnis, aber ich wollte den Absatz nicht mehr loeschen,da vielleicht jemanden etwas auffaellt)
Okay, data[] ist public, d.h. man kann auch ohne die getDimension() Methode die Laenge ueber data.length ermitteln, weshalb getDimension() fuer diese Aufgabe nicht zwangsweise benoetigt wird.
Also, wofuer kann getDimension() sonst noch gebraucht werden? Naja wenn die Aufgabenstellung sagt, es solle 0 zurueckgegeben werden, wenn es noch nicht initialisiert wurde und die Funktionalitaet, die Dimension zurueckzugeben, schon von data.length erfuellt wird, ists nicht mehr unwahrscheinlich, dass der Vector als initialisiert gilt, wenn er durch den VectorND(double[]) instanziiert oder aber init(double[]) aufgerufen wurde… Womit die Methode meiner Ansicht nach nicht mehr getDimension() sondern isInitiated() o. ae. heissen sollte.
Damit haette ich einen Widerspruch gefunden und weiss ueberhaupt nicht mehr, was ihr von uns wollt :-p
Eines ist mir gerade noch aufgefallen: Da data[] public ist, koennten User das Array auf null setzen und damit die Integritaet der Klasse stoeren. Bin ich wenigstens auf dem richtigen Weg?^^
E: Wobei ich das auch nicht mehr wirklich glaube, da es alles andere als angemessen waere, die (eigentlich) internen Variablen zu veraendern, welche allein dazu offenliegen, die Richtigkeit der Implementation zu ueberpruefen
E2: Bevor ichs wieder vergesse: Was soll bei der Normalisierung eines Nullvektors passieren? Entweder bleibt der Vector unveraendert oder jeder Wert wird zu NaN.
Das wird uebrigens noch nicht in der Testclass beachtet, also ggf. noch einen Test einbauen, falls klar ist, wie die Klasse reagieren soll
Es stimmt, die Aufgabenstellung beschreibt nicht eindeutig, wann ein Vektor denn initialisiert ist. Die Testfälle richten sich nach meiner Interpretation, dass ein Vektor initialisiert ist, wenn er mit dem Konstruktor VectorND(double) erstellt wurde oder wenn die Methode init(double) aufgerufen wurde.
Dass data public ist, verstehe ich sowieso nicht. Warum kann das EST die Funktionalität nicht über die gegebenen Methoden überprüfen? Die restliche Funktionalität soll wahrscheinlich geprüft werden können, auch wenn der Konstruktor falsch implementiert wurde.
Diesen Fall hatte ich erst eingebaut, dann ist mir aufgefallen, dass die Aufgabenstellung diesen Fall nicht erwähnt und deshalb auch nicht klar ist, was passieren soll. Ich habe also diesen Test erstmal ausgelassen, wenn jemand mehr Information dazu hat wär natürlich super, dann kann ich das wieder einbauen.
Heute habe ich meinem Tutor gefragt, er sagte, die erste und zweite Methode ist beide Konstruktor, aufgerufen wird entweder die erste oder die zweite. Wenn Data == Null ist, ist die Data nicht initialisiert worden.
Allerdings gibt es die Mothode, die urteilen kann, ob eine Mothode aufgerufen wurde?
Danke schoen ![]()
D.h. also beide Konstruktoren initialisieren das Array. Womit auch der Fall, dass das getDimension () nur 0 zurueckgibt, nur eintritt, wenn der Vektor schlicht die Laenge 0 hat - oder jemand das Array manipuliert und auf null setzt…
Hoi,
also die Testfälle in der Datei im EST laufen einwandfrei.
- Frage:
Die Testfälle hier im Forum klappen jedoch nicht. Das liegt daran, dass
VectorND v = new VectorND(4); ja einen Vektor erstellt, der schon eine Dimension hat.
Bei Check wird dann festgestellt, dass die Dimension des Vektors 4 ist obwohl diese eigentlich 0 sein sollte.
Ich nehme daher an, dass meine getDimension Methode nicht ganz stimmt.
Die Frage die sich mir stellt ist, wie ich der getDimension Methode sage, dass ein Vektor, der überall 0.0 stehen hat eigentlich nicht initialisiert ist?
- Frage:
getDimension und data.length geben mir ja beide die Dimension des Vektors an. Ist es egal, was von beiden ich nun verwende? Denn aus der Aufgabenstellung geht es nicht klar hervor.
Viele Grüße
Smithers
Lobotomy meint, dass ein VectorND auch durch den Konstruktor new VectorND(4) als initialisiert wird. v.getDimension() soll in diesem Fall also 4 zurückgeben, dein Code sollte also richtig sein. Ich habe die Testfälle diesbezüglich noch einmal angepasst und hoffe, dass jetzt das richtige getestet wird. Die Aufgabenstellung definiert leider nicht eindeutig, wann ein VectorND denn initialisiert ist. Es ist auch nicht angegeben, was der Konstruktor VectorND(int dim) genau machen soll. Die Aufgabenstellung fordert nur, dass Speicherbereich für die Dimensionen bereit gestellt werden soll.
Sollte egal sein, allerdings kann data auch null sein. In diesem Fall würde data.length eine NullPointerException werfen.
Ich krieg direkt ne nullpointer exeption wenn ich die test klasse laufen lasse o.O
Wahrscheinlich weil du den Fehler aus diesem Thread noch nicht behoben hast …
nee iwie wirft der Konstruktor bei mir in der Test methode den Nullpointer schon …
Offensichtlich hast du den Konstruktor falsch implementiert.
Kontrolliere den doch mal.
Außerdem: Dieser Thread dient Fragen zu den Testcases und nicht der Implementierung der Aufgabe. Daher wrüde ich dich bitten, deine Fragen im anderen Thread zu stellen.
also der Konstruktor funktioniert bei mir zumindest soweit wie ich Ihn getestet hab anscheinend ist das Problem das im Testcase kein datenarray erkannt wird?! zumindest ist das der Grund für die exeption bzw. als darauf zugegriffen werden soll kommt der error
Welcher der Tests schlägt denn fehl?
es läuft erst gar nicht an ich krieg direkt nen nullpointer Error
Exception in thread "main" java.lang.NullPointerException
at VectorND.<init>(VectorND.java:24)
at VectorNDTest.testDataConstructor(VectorNDTest.java:28)
at VectorNDTest.testDataConstructor(VectorNDTest.java:40)
at VectorNDTest.main(VectorNDTest.java:175)
Zeile 24 is nen zugriff auf das data array im VectorND
Vielleicht is die art und weise wie ich mein Konstruktor gebaut hab falsch?! Ansich funktioniert er, hab selber keinen Test gefunden wo das passiert!?
Aber gut das is dann wohl was bei mir das das Problem auslöst?!