Skip to Content

Lösung: Interfaces und abstrakte Klassen

Stefan Schneider's picture

Lösung Übung 1: Klasse Dollar

package Kurs2.Schnittstelle;
import static java.lang.Math.abs;
import static java.lang.Math.signum;
   /**
   *
   * @author sschneid
   */
   public class Dollar extends Number{
   public final long cents;
   
   public Dollar(int dollars, int cents) {
     // Ignoriere Centsbetrag wenn er nicht im richtigen Intervall ist
     if ((cents<0) || (cents>=100))
        cents=0;
     this.cents = (abs(dollars)*100+cents) *(long)signum(dollars);
   }
   @Override
   public int intValue() {
      return (int)cents/100;
   }
   @Override
   public long longValue() {
      return cents/100;
   }
   @Override
   public float floatValue() {
     return (float)cents/100f;
   }
   @Override
   public double doubleValue() {
      return (double)cents/100d;
   }
}

Lösung Übung 2: 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) {
// 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) {
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;
}
}

 



about seo | book