Übung 10 Aufgabe 2 - Bug ?

ice-breaker
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 216
Registriert: 14. Okt 2008 17:56

Übung 10 Aufgabe 2 - Bug ?

Beitrag von ice-breaker »

Hallo, ich habe da leider etwas Probleme mit dem letzten UnitTest (scoreCardTest.testMixedScoreScoreCard), der Rest läuft sonst durch.

Handeln tut es sich um folgenden Test:

Code: Alles auswählen

assertTrue(sut.isGameFinished());
denn dieser wird bei mir nie true, und wenn ich nichts übersehen habe, kann er das auch nicht.

betrachten wir den letzten Wurf im Spiel, die 6 nach dem Spare:

Code: Alles auswählen

sut.addThrow(6);
was dann so aussieht:

Code: Alles auswählen

public void addThrow(int score) {
	if (currentFrame.isGameFinished())
		throw new IllegalStateException("The game has already been finished. No further throw can be added to this scorecard.");
	currentFrame.addThrowScore(score);
	if (currentFrame.isFinished())
		currentFrame = currentFrame.getNextFrame();
}
da das Spiel noch nicht fertig ist, wird dem momentanen Frame der Score hinzugefügt, da der Frame dann fertig ist, wird ein neuer Frame hinzugefügt, wir befinden uns aber im letzten Frame des ganzen Spiels, weshalb nun currentFrame auf null steht.

nun kommt der gameFinishedCheck:

Code: Alles auswählen

public boolean isGameFinished() {
	return currentFrame == getFrame(10) && getFrame(10).isGameFinished();
}
der aktuelle Frame kann nun niemals gleich Frame 10 sein, da wir im letzten Schritt ja "dummerweise" den aktuellenFrame auf null gesetzt haben.

Ist dies ein Fehler im vorgegebenen Sourcecode ?

Wenn ich den Code von addThrow etwas umschreibe, was immernoch den gleichen Regeln entspricht, funktioniert alles:

Code: Alles auswählen

public void addThrow(int score) {
	if (currentFrame.isGameFinished())
		throw new IllegalStateException("The game has already been finished. No further throw can be added to this scorecard.");
	currentFrame.addThrowScore(score);
	if (currentFrame.isFinished() && !this.isGameFinished())
		currentFrame = currentFrame.getNextFrame();
}
So liebe Veranstalter, ist das ein Fehler in der vorgegebenen Implementierung und darf von uns ausgebügelt werden :?:

mitschke
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 184
Registriert: 10. Okt 2008 16:09

Re: Übung 10 Aufgabe 2 - Bug ?

Beitrag von mitschke »

Hallo,

wir haben eine funktionierende Implemetierung die genau mit dem vorgegebenen Sourcecode arbeitet.

Man kann das ganze auch aus dem Blickwinkel sehen, dass ein beendetes Spiel immer beim letzten Frame stehen bleibt.
Wenn man die Frames durchgeht und am Ende currentFrame auf null setzt, kann es tatsächlich nicht funktionieren.

Wie bereits festgestellt müsste man dann die erste Bedingung aus dem untenstehenden Code nehmen.

Code: Alles auswählen

public boolean isGameFinished() {
   return currentFrame == getFrame(10) && getFrame(10).isGameFinished();
}
Wir werden das bei der Korrektur berücksichtigen.
Dipl.-Inform. Ralf Mitschke <mitschke@st.informatik.tu-...>

Software Technology Group

ice-breaker
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 216
Registriert: 14. Okt 2008 17:56

Re: Übung 10 Aufgabe 2 - Bug ?

Beitrag von ice-breaker »

mitschke hat geschrieben:Man kann das ganze auch aus dem Blickwinkel sehen, dass ein beendetes Spiel immer beim letzten Frame stehen bleibt.
Wenn man die Frames durchgeht und am Ende currentFrame auf null setzt, kann es tatsächlich nicht funktionieren.
neija dieser Blickwinkel ist aber genau der, nachdem die isGameFinished-Methode aufgebaut ist.
Die addThrow-Methode jedoch scheint aus einem anderen Blickwinkel implementiert zu sein, weil sie immer versucht noch einen Frame hinten anzuhängen.

Antworten

Zurück zu „Archiv“