/**
Diese Klasse enthaelt auch die Methode toString(). 
Sie unterstützt Zeichenkettenoperationen wie die direkte Ausgabe
mittels System.out.println() oder die Verkettung über den +-Operator.

*/
/*-----------------------------------------------------------------------*/
class Punkt
{
   int x, y;
   String name;
   static int AnzahlPunkte, MaxPunkte;

   /**
   *  Hauptkonstruktor. Er ueberprueft auf MaxPunkte.
   *  Alle anderen Konstruktoren rufen diesen Konstruktor auf.
   */
   Punkt(int x, int y, String name)
   {
      if (AnzahlPunkte < MaxPunkte)
         AnzahlPunkte++;
      else
      {  System.out.println("Zu viele Punkte. Fehler bei Punkt " + name);
         return;
      }
      this.x = x;
      this.y = y;
      this.name = name;
   }

   Punkt()
   {  this(0, 0, "unbenannt");  }

   Punkt(String n)
   {  this(0, 0, n);  }

   Punkt(int a, int b)
   {  this(a, b, "unbenannt");  }
   
   double laenge()
   {  
      return Math.sqrt(x*x + y*y);
   }
   
   Punkt maximum(Punkt p)
   {
      if (laenge() > p.laenge())
         return this;
      else
         return p;
   }

   static
   {
      AnzahlPunkte = 0;
      MaxPunkte = 4;
   }

   /**
   *  Beender mit Testausdrucken, die anzeigen, wann er aufgerufen 
   *  wird.
   */
   public void finalize()
   {
      AnzahlPunkte--;
   }   
   
   static Punkt maximum(Punkt p1, Punkt p2)
   {
      if (p1.laenge() > p2.laenge())
         return p1;
      else
         return p2;
   }

   void zeige()
   {
      System.out.println(
         name + "(" + x + "," + y + "), Anzahl= " + AnzahlPunkte);
   }
   
   void zeige(String txt)
   {  
      System.out.print(txt + ": ");
      this.zeige();
   }

   public String toString()
   {
      return name + "(" + x + "," + y + "), Anzahl= " + AnzahlPunkte;
   }
}
