Java Standard: Lösungen Assertations
Lösungen zu den Übungen: Assertion
BearbeitenDiese Seite enthält die Lösungen zu den Übungen zur Java-Anweisung assert
. Das zugehörige Kapitel finden Sie hier.
1: Ein switch()-Test
Bearbeiten1.1: Die assert
-Anweisung wertet den auf sie folgenden Ausdruck aus und löst sie nach true oder false auf. Diese Auflösung ist in diesem Fall nicht nötig: weil als Testergebnis gleich ein false gesetzt wurde wird das Programm immer dann abgebrochen, wenn die default-Option der switch-Anweisung erreicht wird.
1.2: Da keine Anweisung gegeben wurde, einen eigenen Text auszugeben, wird dem Programmierer beim Abbruch die Standard-Fehlermeldung bei assert
-Anweisungen angezeigt. Um eine eigene Fehlermeldung zu erzeugen könnte man zum Beispiel das Folgende schreiben:
assert false : "Abbruch in der switch()-Anweisung wegen eines fehlerhaften Ergebnisses (nicht JA oder NEIN)";
2: Do it yourself
Bearbeiten2.1: Der Code könnte etwa folgendermaßen aussehen:
public int diceTest() {
private int summe = 0;
private int result = 0;
for(int n = 0; n< 100; n++) {
result = dice():
assert result >= 1 : "Würfelwurf kleiner als 1 registriert";
assert result <= 6 : "Würfelwurf größer als 6 registriert";
summe += result;
}
return summe;
}
2.2: Es wird der Test auf "Resultat >= 1" fehlschlagen, also der erste assert-Test ausgelöst. Der Grund ist die fehlerhafte Programmierung der Funktion dice() aus der Aufgabe: sie liefert nicht, wie behauptet, die Werte 1 bis 6 zurück, sondern 0 bis 5. Grund dafür ist die Funktion Math.random(). Sie liefert einen Wert zwischen 0 und 1 zurück. Durch den Cast des gelieferten double-Wertes von Math.random() zu einem (int)-Wert werden die Nachkommastellen abgeschnitten. In einem von sechs Fällen wird ein Wert unter ⅙ zurückgeliefert, so dass durch die fehlende Rundung beim Cast der Wert 0 zurückgeliefert wird.
Eine sauber programmierte Funktion dice() könnte also folgendermaßen aussehen:
public int dice() {
return Math.min((int)(Math.random()*6)+1, 6);
}