public class Datum {

 

    private int tag;

    private int monat;

    private int jahr;

    // es duerfen hier keine weiteren Objektvariablen wie „int alter“ stehen!!

 

    public Datum( int tag, int monat, int jahr ) {

      this.tag   = tag;

      this.monat = monat;

      this.jahr  = jahr;

    }

 

    public boolean vergleicheTagMonat( Datum zweitesDatum ) {

      if( ( this.tag   == zweitesDatum.tag ) &&

          ( this.monat == zweitesDatum.monat ) )

          return true;

      return false;

    }

 

    // eine ausführliche und verständliche Version

 

    public int wieAlt( Datum d2 ) {

 

      int alter = 0;

 

      if( d2.monat > monat )

          alter = d2.jahr – jahr;

 

      if( (d2.monat == monat) && (d2.tag >= tag) )

          alter = d2.jahr – jahr;

 

      if( (d2.monat == monat) && (d2.tag < tag) )

          alter = d2.jahr – jahr - 1;

 

      if( d2.monat < monat )

          alter = d2.jahr – jahr - 1;

 

      return alter;

    }     

 

    /*

    // eine kürzere und schnellere Version

    public int wieAlt( Datum zweitesDatum ) {

      int alter =  zweitesDatum.jahr - this.jahr;

 

      if( zweitesDatum.monat > this.monat )

          return alter;

 

      if( zweitesDatum.monat < this.monat )

          return alter-1;

 

      // hier sind beide Monate gleich

      if( zweitesDatum.tag >= this.tag )

          return alter;

 

      return alter - 1;

    }

   */

}


-----------------------------------------------------------------------------

 

import java.awt.*;

import java.awt.event.*;

 

public class DatumApplet extends java.applet.Applet {

 

    Datum meinGeburtsDatum = new Datum( 12, 5, 1989 );

    Datum zweitesDatum;

 

    TextField tagFeld    = new TextField();

    TextField monatsFeld = new TextField();

    TextField jahrFeld   = new TextField();

    TextField alterFeld  = new TextField();

    TextField meldeFeld  = new TextField();

 

    Button geburtstagsBt = new Button( "Habe ich Geburtstag?" );

    Button alterBt       = new Button( "Wie alt bin ich?" );

 

   

    public void init() {

     

      setLayout( new GridLayout( 6, 2, 20, 20 ) );

     

      add( new Label( "Tag:", Label.RIGHT ) );

      add( tagFeld );

     

      add( new Label( "Monat:", Label.RIGHT ) );

      add( monatsFeld );

     

      add( new Label( "Jahr:", Label.RIGHT ) );

      add( jahrFeld );

 

      add( new Label( "Alter:", Label.RIGHT ) );

      add( alterFeld );

     

      add( geburtstagsBt );

      add( alterBt );

 

      add( new Label( "Meldungen zum Geburtstag:", Label.RIGHT ) );

      add( meldeFeld );

 

      // optional !

      alterFeld.setEditable( false );   

      meldeFeld.setEditable( false );

 

      geburtstagsBt.addActionListener( new ActionListener() {

            public void actionPerformed( ActionEvent e ) {

                handleGeburtstag();

            }

          });

     

      alterBt.addActionListener( new ActionListener() {

            public void actionPerformed( ActionEvent e ) {

                handleAlter();

            }

          });

    }

 

    protected void zeigeAlter( int alter ) {

      alterFeld.setText( "" +  alter );

    }

 

    protected void melde( String meldung ) {

      meldeFeld.setText( meldung );
    }

   

    protected void handleAlter() {

      int tag   = Integer.parseInt( tagFeld.getText() );

      int monat = Integer.parseInt( monatsFeld.getText() );

      int jahr  = Integer.parseInt( jahrFeld.getText() );

     

      zweitesDatum = new Datum( tag, monat, jahr );

     

      zeigeAlter( meinGeburtsDatum.wieAlt( zweitesDatum ) );

    }

 

    protected void handleGeburtstag() {

      int tag   = Integer.parseInt( tagFeld.getText() );

      int monat = Integer.parseInt( monatsFeld.getText() );

      int jahr  = Integer.parseInt( jahrFeld.getText() );

     

      zweitesDatum = new Datum( tag, monat, jahr );

           

      if( meinGeburtsDatum.vergleicheTagMonat( zweitesDatum ) )

          melde( "Glueckwunsch" );

      else

          melde( "leider nein" );

    }

}