Skip to Content

Lösungen (Assertions)

Übung 1: Einfügen von Assertions

Klasse Euro

package Kurs2.Schnittstelle;
import static java.lang.Math.abs;
import static java.lang.Math.signum;
/**
*
* @author sschneid
* @version 1.1
*/
public class Euro extends Number implements Waehrung, Comparable{
/**
* Der gesamte Betrag wird intern in Cents verwaltet
*/
public final long cents; public Euro(long euros, long cents) { assert ((cents>=0) && (cents < 101)): "Cents Bereichsverletzung";
// Ignoriere Centsbetrag wenn er nicht im richtigen Intervall ist
if ((cents<0) || (cents>=100))
cents=0;
this.cents = (abs(euros)*100+cents) *(long)signum(euros);
}
@Override
public int intValue() {
return (int)cents/100;
}
@Override
public long longValue() {
return cents/100;
}
@Override
public float floatValue() {
// Signum und Absolutwert sind notwendig
// da -2.20= -(2 + 0.2) sind. Falsch: -2 + 0.2 ergibt -1.8!
return (float)cents/100f;
}
@Override
public double doubleValue() {
// Signum und Absolutwert sind notwendig
// da -2.20= -(2 + 0.2) sind. Falsch: -2 + 0.2 ergibt -1.8!
return (double)cents/100d;
}
@Override
public String symbol() {
return "€";
}
@Override
public String toString() {
// Füge eine Null bei Centbeträgen zwischen 0 und 9 eine
String leerstelle = ((abs(cents)%100)<10) ? "0" : "";
return Long.toString(cents/100L) + "." + leerstelle +
Long.toString(abs(cents%100L)) + symbol();
}
@Override
public Waehrung mult(double d) { assert (d!=0): "Multplikation mit " + d + "nicht erlaubt";
long temp;
temp = (long)((double)cents *d);
return new Euro(temp/100L,abs(temp%100L));
}
@Override
public int compareTo(Object o) {
int result;
if (o instanceof Euro) {
Euro e = (Euro) o;
result = (int)(this.cents-e.cents);
}
else {result = -1;} // Alles was kein Euro ist, ist kleiner
return result;
}
}

 



book | by Dr. Radut