/**
    Diese Klasse beschreibt einfache Punkte in der Ebene.
*/
public class Point
{   private int x;
    private int y;

    /**
        Der Standardkonstruktor initialisiert beide
        Koordinaten mit 1 (statt wie gewohnt mit 0).
    */
    Point()
    {   this(1,1);
    }

    /**
        Ein weiterer Konstruktor initialisiert die
        x-Koordinate mit a und die y-Koordinate mit b.
    */
    Point (int a, int b)
    {   this.x = a;
        this.y = b;
    }

    /**
        Die Methode toString liefert eine druckfaehige
        Zeichenfolge.
    */
    public String toString()
    {   return "Point[x="+x+",y="+y+"]";
    }

    /**
        Die Methode move verschiebt den gewaehlten Punkt um
        den Vektor (dx,dy).
        @param dx Verschiebung der x-Koordinate
        @param dy Verschiebung der y-Koordinate
    */
    public void move(int dx, int dy)
    {   this.x = this.x + dx;  //this noetig wg. Verschattung
        this.y = this.y + dy;
    }

    /**
        Zugriff auf x-Koordinate.
    */
    public int getX()
    {   return this.x;
    }

    /**
        Zugriff auf y-Koordinate.
    */
    public int getY()
    {    return y;  // this ist hier nicht noetig
    }

    /**
        Versuch, mit Call-by-Reference den Point mit
        der groesseren y-Koordinate auszuwaehlen.
    */
    public void chooseErr (Point p1, Point higherPoint)
    {   if (this.getY() >= p1.getY())
        {   higherPoint = this;
        }
        else
        {   higherPoint = p1;
        }
    }

    /**
        Die Methode choose waehlt den Point mit
        der groesseren y-Koordinate aus.
        Spezifikation von choose:
        post:  (this.getY() >= p1.getY  =>  return == this)  &
               (this.getY() >= p1.getY  =>  return == p1)
    */
    public Point choose (Point p1)
    {   if (this.getY() >= p1.getY())
        {   return this;
        }
        else
        {   return p1;
        }
    }

}

