Exercises in this lecture   Go to the notes, in which this exercise belongs -- Keyboard shortcut: 'u'   Alphabetic index   Course home   

Exercise solution 8.1
Sammenlignelige bankkonti


Her følger en løsning:

interface Comparable {
  boolean lessThan(Comparable other);
  boolean lessThanOrEqual(Comparable other);
  boolean greaterThan(Comparable other);
  boolean greaterThanOrEqual(Comparable other);
}

class Konto {
   protected double RenteSats = 0.02; // en static erklæring er mere naturlig
   protected String navn;
   protected double saldo;

   public Konto(String ejer) {
      navn = ejer; 
      saldo = 0;
   }

   public void hæv ( double beløb ) {
      saldo = saldo - beløb;
   }

   public void indsæt ( double beløb) {
      saldo = saldo + beløb;
   }         

   public void overførFra(double beløb, Konto fra) {
      fra.hæv(beløb);
      indsæt(beløb);
   } 

   public void tilskrivRente() {
      saldo = saldo + saldo * RenteSats;
   }

   public String toString() {
      return navn + "'s konto indeholder "
            + saldo + " kroner";
   }
} // Konto


class CompKonto extends Konto implements Comparable {

  public CompKonto(String nytNavn) {
    super(nytNavn);
  }

  // redefinition af equals fra klassen Object
  public boolean equals(CompKonto other){
    return (this.saldo == other.saldo);
  }

  public boolean lessThan(Comparable other){
    return (this.saldo < ((CompKonto)other).saldo);
  }

  public boolean lessThanOrEqual(Comparable other){
    return (this.lessThan(other) || this.equals((CompKonto)other));
    // NB: hvis vi ikke caster til CompKonto i equals bliver equals i Object aktiveret
    // Konsekvens af overloadning. Covarians får aldrig en chance
  }

  public boolean greaterThan(Comparable other){
    return (! this.lessThanOrEqual(other));
  }

  public boolean greaterThanOrEqual(Comparable other){
    return (! this.lessThan(other));
  }
}


public class KontoComparison {

   public static void main( String[] args ) {

     CompKonto konto1 = new CompKonto("Jens");
     CompKonto konto2 = new CompKonto("Peter");

     konto1.indsæt(600);
     konto2.indsæt(500);

     if (konto1.equals(konto2) )
       System.out.println("konto1 er lig med konto2");
     else
       System.out.println("konto1 IKKE lig med konto2");

     if (konto1.lessThan(konto2) )
       System.out.println("konto1 mindre end konto2");
     else
       System.out.println("konto1 IKKE mindre end konto2");

     if (konto1.lessThanOrEqual(konto2) )
       System.out.println("konto1 mindre end eller lig med konto2");
     else
       System.out.println("konto1 IKKE mindre end eller lig med konto2");

     if (konto1.greaterThan(konto2) )
       System.out.println("konto1 større end konto2");
     else
       System.out.println("konto1 IKKE større end konto2");

     if (konto1.greaterThanOrEqual(konto2) )
       System.out.println("konto1 større end eller lig med konto2");
     else
       System.out.println("konto1 IKKE større end eller lig med konto2");


   }
}

Her er endvidere et link til det rene Java program .